2011-01-08 20 views
2

ContentControlのContentプロパティをDrawingVisualオブジェクトに設定できますか?ドキュメントでは、内容は何でも構いませんが、試してみましたが、コントロールをキャンバスに追加すると何も表示されません。それは可能ですか?コンテンツがDrawingVisualであるContentControlをキャンバスに追加する完全なコードを投稿することができますか?WPF - ContentControlの内容をDrawingVisual

答えて

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]; 
    } 

} 
} 
関連する問題