基本上我正在尝试做的是为我的画布触发一种“脏”状态,以便我知道是否有未保存的更改。
WPF InkCanvas中是否有一个事件我可以用来处理笔画变化的任何时间?
如果没有,我应该听哪些事件等同?我的第一个猜测就是:
StrokeCollected
StrokeErased
StrokesReplaced
虽然我错了,但却错过了一个边缘案例。
注意:如果我得到误报(在实际上没有标记为脏),这不是什么大问题,但我不想要假阴性。
答案 0 :(得分:2)
似乎这些事件将起到作用:
InkCanvas.StrokesReplaced
(设置Strokes属性时发生)StrokeCollection.StrokesChanged
(在添加或删除笔划时发生)Stroke.StylusPointsChanged
(当笔画的形状发生变化时发生)Stroke.StylusPointsReplaced
(设置StylusPoints属性时发生)Stroke.DrawingAttributesChanged
(在笔画属性发生变化时发生)Stroke.DrawingAttributesReplaced
(设置DrawingAttributes属性时发生)就我而言,我从不替换属性或更改绘图属性,因此我只使用StrokeCollection.StrokesChanged
和Stroke.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
}