基本上我想要做的是为我的画布触发一种“脏”状态,以便我知道是否有未保存的更改。
WPF InkCanvas 中是否有一个事件可以在笔画发生变化时随时处理?
如果没有,我应该听什么事件来获得等价物?我的第一个猜测是:
StrokeCollected
StrokeErased
StrokesReplaced
虽然我可能是错的,并且错过了一个边缘案例。
注意:如果我得到误报(实际上没有被标记为脏),这没什么大不了的,但我不想要误报。
这些事件似乎可以完成这项工作:
InkCanvas.StrokesReplaced
(在设置 Strokes 属性时发生)StrokeCollection.StrokesChanged
(在添加或删除笔画时发生)Stroke.StylusPointsChanged
(当笔画的形状改变时发生)Stroke.StylusPointsReplaced
(设置 StylusPoints 属性时发生)Stroke.DrawingAttributesChanged
(当笔画的属性改变时发生)Stroke.DrawingAttributesReplaced
(在设置 DrawingAttributes 属性时发生)就我而言,我从不替换属性或更改绘图属性,所以我只使用StrokeCollection.StrokesChanged
and 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
}