本质上,我想做的是触发 Canvas 的一种“脏”状态,以便我知道是否有未保存的更改。
WPF InkCanvas 中是否有一个事件可以用来在笔划发生变化时随时进行处理?
如果没有,我应该监听哪些事件来获得同等的效果?我的第一个猜测是:
StrokeCollected
StrokeErased
StrokesReplaced
尽管我可能是错的,并且错过了边缘情况。
注意:如果我得到误报(标记为脏,而实际上不是),那也不是什么大问题,但我不想要误报。
最佳答案
看起来这些事件可以完成任务:
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
}
关于c# - 是否有通用的 InkCanvas StrokesChanged 类型的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353637/