因此,我在VisualCollection中的可視化標記來自畫布派生的類。如何在兒童畫布上顯示畫布在XAML中定義的畫布的UIElements
public class OverlayCanvas:Canvas
{
VisualCollection visuals;
DrawingVisual MarkerVisual = new DrawingVisual();
}
在xaml中我定義了一個拖動選擇邊框,我也希望繪製它。
Components:OverlayCanvas
>
<Border
x:Name="dragSelectionBorder"
BorderBrush="White"
BorderThickness="0"
CornerRadius="1"
Visibility="Collapsed"
/>
</Components:OverlayCanvas>
如何同時顯示?
通常我會重寫這些,但是我必須在xaml中定義畫布的所有子項並將它們添加到VisualCollection中嗎?如果我只是重寫這兩個方法,那麼當渲染調用getvisualchild時,它將只繪製標記DrawingVisual,但它不會獲取在xaml中定義的項目。
protected override Visual GetVisualChild(int index)
{
return visuals[index];
}
protected override int VisualChildrenCount
{
get
{
return visuals.Count;
}
}
我想也許我可以Panel.Children.Add但它需要一個UIElement。然後我認爲也許正確的事情是Visual.AddVisualChild,所以我在Canvas中的set marker事件上運行了這段代碼。
{
MarkerVisual = new DrawingVisual();
using (DrawingContext dc = MarkerVisual.RenderOpen())
{
dc.DrawLine(MarkerPen, new Point(MouseHorizontalPositionInPixels, YPositionForStartOfVerticalAxisLines),
new Point(MouseHorizontalPositionInPixels, ActualHeight));
}
this.AddVisualChild(MarkerVisual);
但是,在這種情況下,將在畫布中顯示xaml中定義的UI元素,但不顯示標記。
也許這將助陣 - http://msdn.microsoft.com/en-us/庫/ ms742254(v = vs.110)的.aspx – terrybozzio