在自定义InkCanvas中绘制描边和DrawingVisual

时间:2013-10-26 12:43:00

标签: c# wpf stroke inkcanvas

我有一个继承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)下,因此,例如我在一个大矩形下绘制笔划我看不到任何东西,因为笔划是隐藏的。

如何解决这个偷偷摸摸的问题?

1 个答案:

答案 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);
}