我有一个继承InkCanvas
类的类。我重写了VisualChildrenCount
属性和GetVisualChild
方法:
Visual GetVisualChild(int index)
{
if (index == 0)
{
return InkCanvas.GetVisualChild(index);
}
return visuals[index - 1].Visual;
}
int VisualChildrenCount
{
get { return visuals.Count + InkCanvas.VisualChildrenCount; }
}
视觉对象是我的视觉对象,Visual
属性返回DrawingVisual
对象。
我使用这个类来添加和显示DrawingVisual
个对象(性能原因):
void AddVisual(MyVisual visual)
{
if (visual == null)
throw new ArgumentNullException("visual");
visuals.Add(visual);
AddVisualChild(visual->Visual);
AddLogicalChild(visual->Visual);
}
问题如下:当我绘制一个新的Stroke
(用鼠标在一个自由绘图中)时,这个笔画被添加到InkCancas但是在之前的DrawingVisual(Z-order)下,因此,例如我在一个大矩形下绘制笔划我看不到任何东西,因为笔划是隐藏的。
如何解决这个偷偷摸摸的问题?
答案 0 :(得分:1)
将InkCanvas'Background
属性设置为Transparent
(或null
),并从GetVisualChild覆盖中以不同顺序返回视觉效果:
protected override Visual GetVisualChild(int index)
{
if (index < visuals.Count)
{
return visuals[index].Visual;
}
return base.GetVisualChild(index - visuals.Count);
}