【问题标题】:Is there a generic InkCanvas StrokesChanged type of event?是否有通用 InkCanvas StrokesChanged 类型的事件?
【发布时间】:2012-11-13 00:00:15
【问题描述】:

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

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

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

StrokeCollected
StrokeErased
StrokesReplaced

虽然我可能是错的,并且错过了边缘情况。

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

【问题讨论】:

    标签: c# .net wpf events inkcanvas


    【解决方案1】:

    似乎这些事件可以完成这项工作:

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

    就我而言,我从不替换属性或更改绘图属性,所以我只使用StrokeCollection.StrokesChangedStroke.StylusPointsChanged。这是我的代码的 sn-p。

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多