Как удалить пользовательские обводки, добавленные в WPF InkCanvas DrawingContext, зная только ограничивающий прямоугольник?

Итак, у меня есть InkCanvas, к которому я добавил «пользовательские штрихи».

Я полностью не понимаю, как удалить пользовательские штрихи, добавленные в InkCanvas через его DrawingContext. (Google не помог :( ) Если предположить, что у меня есть ограничивающий прямоугольник для области на 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)));
    }

}

Подобные методы приводят к картинке вида: введите здесь описание изображения

Как стираются пользовательские штрихи, зная только ограничивающий прямоугольник?

Спасибо за любую помощь или предложения.


person Alan Wayne    schedule 09.06.2017    source источник


Ответы (1)


Тьфу... Что должно было быть очевидным, так это то, что пользовательские штрихи наследуются от Stroke, и хотя однажды записанный контекст данных не может быть удален, InkCanvas может стереть свои штрихи, включая пользовательские штрихи, изменив InkCanvasEditingMode на EraseByStroke. Надеюсь, это поможет кому-то.

person Alan Wayne    schedule 09.06.2017