gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:27 26 4
gpt4 key购买 nike

本质上,我想要做的是为我的 Canvas 触发一种“脏”状态,以便我知道是否有未保存的更改。

WPF InkCanvas 中是否有我可以用来随时处理笔画变化的事件?

如果没有,我应该听什么事件?我的第一个猜测是这些:

StrokeCollected
StrokeErased
StrokesReplaced

虽然我可能是错的,并且遗漏了一个边缘案例。

注意:如果我得到误报(标记为脏,但实际上不是),这没什么大不了的,但我不想要误报。

最佳答案

看起来这些事件可以完成这项工作:

  • 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
}

关于c# - 是否有通用的 InkCanvas StrokesChanged 事件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com