我不明白。让我们说我在InkCanvas上画了一个“S”。
OnStrokeCollected事件将触发。在OnStrokeCollected事件中,我将笔划发送到InkAnalyzer:
analyzer.AddStroke(e.Stroke)
现在我逐点擦除“S”的中心点。
OnStrokeErasing事件触发。现在我可以从InkAnalzyer中删除原来的“S”:
analyzer.RemoveStroke(e.Stroke)
但是,我现在有两招。原始“S”的顶部和底部。由于我现在有两个笔画,我如何将这些“新”笔画添加回InkAnalyzer(已删除原始复合笔画“S”)而不删除整个前一个笔画集并重新添加新的笔画集?
我真诚地感谢任何想法。
答案 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);
}
希望这对某人有用。