在自定义 InkCanvas 中绘制笔触和绘制视觉对象
本文关键字:绘制 视觉 对象 InkCanvas 自定义 | 更新日期: 2023-09-27 18:37:06
我有一个继承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 顺序)下,因此,例如,如果我在一个大矩形下绘制笔触,我看不到任何东西,因为笔触是隐藏的。
如何解决这个偷偷摸摸的问题?
将 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);
}