2
我可以將ContentControl的Content屬性設置爲DrawingVisual對象嗎?它在文檔中說,內容可以是任何東西,但我試過了,當我將控件添加到畫布時什麼也沒有顯示。是否有可能,如果是這樣,你可以發佈完整的代碼,將一個ContentControl(其內容是一個DrawingVisual)添加到畫布上嗎?WPF - ContentControl內容作爲DrawingVisual
我可以將ContentControl的Content屬性設置爲DrawingVisual對象嗎?它在文檔中說,內容可以是任何東西,但我試過了,當我將控件添加到畫布時什麼也沒有顯示。是否有可能,如果是這樣,你可以發佈完整的代碼,將一個ContentControl(其內容是一個DrawingVisual)添加到畫布上嗎?WPF - ContentControl內容作爲DrawingVisual
我可以將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];
}
}
}