需要使用Visual對象而不是Shape;特別是如建議的那樣,DrawingVisual:可用於呈現矢量圖形的視覺對象。實際上,正如MSDN庫中所寫:
DrawingVisual是一個用於渲染形狀,圖像或文本的輕量級繪圖類。這個類被認爲是輕量級的,因爲它不提供佈局,輸入,焦點或事件處理,這提高了它的性能。出於這個原因,圖紙是背景和剪貼畫的理想選擇。
因此,例如,創建一個包含一個矩形一個DrawingVisual:
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.LightBlue, (System.Windows.Media.Pen)null, rect);
// Persist the drawing content.
drawingContext.Close();
return drawingVisual;
}
爲了使用DrawingVisual對象,你需要創建的對象的宿主容器。宿主容器對象必須來自FrameworkElement類,它提供了DrawingVisual類缺少的佈局和事件處理支持。爲可視對象創建主機容器對象時,需要將可視對象參考存儲在VisualCollection中。
public class MyVisualHost : FrameworkElement
{
// Create a collection of child visual objects.
private VisualCollection _children;
public MyVisualHost()
{
_children = new VisualCollection(this);
_children.Add(CreateDrawingVisualRectangle());
// Add the event handler for MouseLeftButtonUp.
this.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(MyVisualHost_MouseLeftButtonUp);
}
}
事件處理例程然後可以通過調用HitTest方法來實現命中測試。該方法的HitTestResultCallback參數引用用戶定義的過程,您可以使用該過程來確定命中測試的結果操作。
你試過DrawingVisual嗎? – 2012-04-03 18:51:01
不可以。您可以給我一個如何使用DrawingVisual而不是像Ellipse或Path之類的Shape的例子。例如,如何添加到我的Canvas [this](http://msdn.microsoft.com/zh-cn/library/ms745546.aspx)使用DrawingVisual的路徑? – gliderkite 2012-04-03 20:56:55
是的,Google上有一些很棒的信息。這裏有一個鏈接,讓你開始:http://msdn.microsoft.com/en-us/magazine/dd483292.aspx – 2012-04-03 20:59:02