ContentControlのContentプロパティをDrawingVisualオブジェクトに設定できますか?ドキュメントでは、内容は何でも構いませんが、試してみましたが、コントロールをキャンバスに追加すると何も表示されません。それは可能ですか?コンテンツがDrawingVisualであるContentControlをキャンバスに追加する完全なコードを投稿することができますか?WPF - ContentControlの内容をDrawingVisual
2
A
答えて
4
ContentControlのContentプロパティをDrawingVisualオブジェクトに設定できますか?
技術的には、可能です。しかし、それはおそらくあなたが望むものではありません。 ContentControlに追加されたDrawingVisualは単に "System.Windows.Media.DrawingVisual"という文字列を表示します。グリッド内の次のコードは、easillyこのデモンストレーションを行います:
<Button>
<DrawingVisual/>
</Button>
が正常のDrawingVisualを使用するには、FrameworkElementの中でそれをカプセル化する必要があります。 Microsoft Referenceを参照してください。
したがって、次のコードは、必要な操作を行うのに役立ちます。
<Window x:Class="TestDump.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestDump"
Title="Window1" Height="300" Width="600" >
<Grid>
<Canvas>
<Button >
<local:MyVisualHost Width="600" Height="300"/>
</Button>
</Canvas>
</Grid>
</Window>
とC#側:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace TestDump
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
public class MyVisualHost : FrameworkElement
{
private VisualCollection _children;
public MyVisualHost()
{
_children = new VisualCollection(this);
_children.Add(CreateDrawingVisualRectangle());
}
// Create a DrawingVisual that contains a rectangle.
private DrawingVisual CreateDrawingVisualRectangle()
{
DrawingVisual drawingVisual = new DrawingVisual();
// Retrieve the DrawingContext in order to create new drawing content.
DrawingContext drawingContext = drawingVisual.RenderOpen();
// Create a rectangle and draw it in the DrawingContext.
Rect rect = new Rect(new System.Windows.Point(160, 100), new System.Windows.Size(320, 80));
drawingContext.DrawRectangle(System.Windows.Media.Brushes.Blue, (System.Windows.Media.Pen)null, rect);
// Persist the drawing content.
drawingContext.Close();
return drawingVisual;
}
// Provide a required override for the VisualChildrenCount property.
protected override int VisualChildrenCount
{
get { return _children.Count; }
}
// Provide a required override for the GetVisualChild method.
protected override Visual GetVisualChild(int index)
{
if (index < 0 || index >= _children.Count)
{
throw new ArgumentOutOfRangeException();
}
return _children[index];
}
}
}
関連する問題
- 1. WPF内のContentControl TreeView
- 2. WPF ContentControl Content as ContentControl
- 3. WPFのカスタムContentControl
- 4. WPF:バインディングContentControlに
- 5. WPF - カスタムキャンバスにContentControlを追加
- 6. WPFバインディングラベルの内容
- 7. WPF ContentControlにコンテンツが親リソース
- 8. 変更内容(WPF)
- 9. ボタンのcontentcontrol内のWPFテキストブロックイベントが呼び出されない
- 10. WPFラベル内容の整列
- 11. C#WPF ContentControlをシリアル化するには?
- 12. C#WPFマウスオーバーボタン - 内容なし
- 13. WPF C# - 内容に応じた列内容の整列とスタイル
- 14. WPF - キャンバス
- 15. WPF WebBrowserの内容を印刷する
- 16. WPF - 同じページに内容を印刷
- 17. 内容に応じたWPFサイズのRichTextBox
- 18. Javascript Apiを使用して別のContentControl内のContentControlを挿入する方法
- 19. キャンバスにDrawingVisualを表示
- 20. 取得のDrawingVisual性質
- 21. ContentControlのDataTemplate内での要素アドレッシング
- 22. WPF - MVVM Light、ContentControlのコンテンツをバインド/設定する方法
- 23. C#ContentControl to Bitmap
- 24. ContentControl WPFのインタラクショントリガーのCommandParameterとしての名前
- 25. 最大幅を持つようにWPF ContentControlを適用する
- 26. StackPanelをContentControl(WPF)として使用する
- 27. WPF ContentControlにデータを手動で再バインドします。
- 28. WPF ContentControlはZIndexを子ZIndexに設定します
- 29. WPF - テキストボックスの内容をバインドするその他のテキストボックス
- 30. リッチなセルの内容を持つWPFの複数列のリスト