如何删除添加到WPF InkCanvas DrawingContext的自定义笔划,只知道边界矩形?

时间:2017-06-09 03:49:50

标签: wpf inkcanvas

所以我有一个InkCanvas,我添加了“自定义笔画”。

我完全不知道如何通过 DrawingContext 擦除自定义笔画添加到InkCanvas中。 (谷歌一直没有帮助:()假设我想要擦除InkCanvas上的区域的边界矩形,怎么能这样做?

(我很快得出的结论是,一旦在DrawingContext上绘制了某些内容,就无法将其删除 - 仅限于:()。

自定义笔划是通过覆盖笔划的DrawCore方法以标准方式创建的,例如,

// Draw Rectangle
public class RectangleStroke : Stroke
{
    // Constructor
    public RectangleStroke(StylusPointCollection pts)
        : base(pts)
    {
        StylusPoints = pts;
    }

    protected override void DrawCore(DrawingContext drawingContext, DrawingAttributes drawingAttributes)
    {
        if (drawingContext == null)
        {
            throw new ArgumentNullException("drawingContext");
        }
        if (null == drawingAttributes)
        {
            throw new ArgumentNullException("drawingAttributes");
        }
        DrawingAttributes originalDa = drawingAttributes.Clone();
        SolidColorBrush brush = new SolidColorBrush(drawingAttributes.Color);
        brush.Freeze();
        Pen pen = new Pen(brush, 1);

        StylusPoint stp = StylusPoints[0];
        StylusPoint sp = StylusPoints[1];

        drawingContext.DrawRectangle(brush, pen, new Rect(new Point(sp.X, sp.Y), new Point(stp.X, stp.Y)));
    }

}

类似的方法会产生如下图片: enter image description here

如果仅知道边界矩形,如何删除自定义笔划?

感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:1)

呃......应该很明显的是,自定义笔画继承自Stroke,即使写入的datacontext不能被写入,InkCanvas也可以通过将InkCanvasEditingMode更改为擦除其笔画 - 包括自定义笔画。 EraseByStroke。希望这有助于某人。