是否有通用的InkCanvas StrokesChanged类型的事件?

时间:2012-11-13 00:00:16

标签: c# .net wpf events inkcanvas

基本上我正在尝试做的是为我的画布触发一种“脏”状态,以便我知道是否有未保存的更改。

WPF InkCanvas中是否有一个事件我可以用来处理笔画变化的任何时间?

如果没有,我应该听哪些事件等同?我的第一个猜测就是:

StrokeCollected
StrokeErased
StrokesReplaced

虽然我错了,但却错过了一个边缘案例。

注意:如果我得到误报(在实际上没有标记为脏),这不是什么大问题,但我不想要假阴性。

1 个答案:

答案 0 :(得分:2)

似乎这些事件将起到作用:

  • InkCanvas.StrokesReplaced(设置Strokes属性时发生)
  • StrokeCollection.StrokesChanged(在添加或删除笔划时发生)
  • Stroke.StylusPointsChanged(当笔画的形状发生变化时发生)
  • Stroke.StylusPointsReplaced(设置StylusPoints属性时发生)
  • Stroke.DrawingAttributesChanged(在笔画属性发生变化时发生)
  • Stroke.DrawingAttributesReplaced(设置DrawingAttributes属性时发生)

就我而言,我从不替换属性或更改绘图属性,因此我只使用StrokeCollection.StrokesChangedStroke.StylusPointsChanged。这是我的代码片段。

public MainWindow()
{
    inkCanvas.Strokes.StrokesChanged += Strokes_StrokesChanged;
}

private void Strokes_StrokesChanged(object sender, StrokeCollectionChangedEventArgs e)
{
    // Mark dirty
    foreach (Stroke stroke in e.Added)
    {
        stroke.StylusPointsChanged += stroke_StylusPointsChanged;
    }
    foreach (Stroke stroke in e.Removed)
    {
        stroke.StylusPointsChanged -= stroke_StylusPointsChanged;
    }
}

private void stroke_StylusPointsChanged(object sender, System.EventArgs e)
{
    // Mark dirty
}