监听WPF元素的IsEnabled属性变化

6
我希望能够监听WPF元素上IsEnabled属性的变化(以便在其发生更改时运行一些常用代码),而不必在每个窗口/页面中编写大量代码。
我还想避免由于强事件监听器而导致的潜在内存泄漏问题。我找到了一些文章,建议使用弱事件监听器等等,但这似乎对于应该很容易的事情来说过于复杂。
我不想为此子类化控件,因为有几种控件类型(并且可能会有更多)我想要监听IsEnabled的变化。
是否有人提出了更简洁的处理方式?
2个回答

6

有一个Control.IsEnabledChanged事件。


3
实际上,它的名称是IsEnabledChanged。 - Ivan Golović

5

解决这个问题的一个好方法是创建一个自定义的附加属性,并设置单向绑定,将IsEnabled属性作为源:

<Control IsEnabled={Binding IsEnabledProperty}
         AttachedProperty={Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Mode=OneWay}"/>

这允许您在附加属性的更改处理程序中处理常见功能(这可能涉及触发自定义路由事件,因为IsEnabled是普通CLR事件,不会冒泡)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接