如何在InkCanvas上按点擦除时得到的结果?

时间:2014-08-18 13:46:15

标签: wpf inkcanvas ink-analyzer

我不明白。让我们说我在InkCanvas上画了一个“S”。

OnStrokeCollected事件将触发。在OnStrokeCollected事件中,我将笔划发送到InkAnalyzer:

analyzer.AddStroke(e.Stroke)

现在我逐点擦除“S”的中心点。

OnStrokeErasing事件触发。现在我可以从InkAnalzyer中删除原来的“S”:

analyzer.RemoveStroke(e.Stroke)

但是,我现在有两招。原始“S”的顶部和底部。由于我现在有两个笔画,我如何将这些“新”笔画添加回InkAnalyzer(已删除原始复合笔画“S”)而不删除整个前一个笔画集并重新添加新的笔画集?

我真诚地感谢任何想法。

1 个答案:

答案 0 :(得分:0)

我能提出的唯一想法发布在下面。我当然希望有一个更好的解决方案。

XAML

  <ink:CustomInkCanvas x:Name="inkcanvas"  Strokes="{Binding Strokes}" /> 

视图模型

        strokes = new StrokeCollection();
        (strokes as INotifyCollectionChanged).CollectionChanged += (sender, e) =>
        {
            if (isErasingByPoint == true)
            {
                if (e.OldItems != null && e.OldItems.Count > 0)
                {
                    foreach (Stroke s in e.OldItems)
                    {
                    }
                }

                if (e.NewItems != null && e.NewItems.Count > 0)
                {
                    foreach (Stroke s in e.NewItems)
                    {
                    }

                }
            }
            isErasingByPoint = false;

        };


    public void OnStrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
    {
        // OnStrokeCollected event occurs AFTER StrokeCollection.CollectionChanged event.
        analyzer.AddStroke(e.Stroke);
    }

    public void OnStrokeErasing(object sender,  InkCanvasStrokeErasingEventArgs e)
    {
        // When erasingbypoint, OnStrokeErasing event occurs BEFORE StrokeCollection.CollectionChanged event.
        // if erasing by stroke, the StrokeCollection.CollectionChanged event is not called.
        if (EditingMode == InkCanvasEditingMode.EraseByPoint)
            isErasingByPoint = true;
        else
            analyzer.RemoveStroke(e.Stroke);
    }

希望这对某人有用。