WPF InkPresenter 用 IncrementalStrokeHitTester 做橡皮擦碰到的问题

问题

根据之前网上找到的示例,原先的碰撞事件是这么写的

        _strokeHitTester =
                    this._inkPresenter.Strokes.GetIncrementalStrokeHitTester(new RectangleStylusShape(eraseSize, eraseSize));

        _strokeHitTester.StrokeHit += (o, argsHitTester) =>
        {
            StrokeCollection eraseResults = argsHitTester.GetPointEraseResults();
            _inkPresenter.Strokes.Remove(argsHitTester.HitStroke);
            _inkPresenter.Strokes.Add(eraseResults);
        };

这样写虽然是能够擦除掉笔记,但是之前一直用同一种颜色的画笔,所以没有发现问题,后来用了不同颜色画笔画线之后再擦除就发现会导致下层的线条往上浮现。如图
WPF InkPresenter 用 IncrementalStrokeHitTester 做橡皮擦碰到的问题_第1张图片

解决办法

本来以为是 Add 的时候添加的线条顺序反过来了导致的,然后把 eraseResults Reverse了再 Add 发现还是一样的情况。

于是尝试使用 _inkPresenter.Strokes.Replace 来直接替换掉擦除的 Stroke 发现一切恢复正常~

        _strokeHitTester =
                    this._inkPresenter.Strokes.GetIncrementalStrokeHitTester(new RectangleStylusShape(eraseSize, eraseSize));

        _strokeHitTester.StrokeHit += (o, argsHitTester) =>
        {
            StrokeCollection eraseResults = argsHitTester.GetPointEraseResults();
             _inkPresenter.Strokes.Replace(argsHitTester.HitStroke, eraseResults);
        };

WPF InkPresenter 用 IncrementalStrokeHitTester 做橡皮擦碰到的问题_第2张图片

你可能感兴趣的:(WPF,C#)