在Wpf元素上侦听IsEnabled的更改

时间:2011-08-04 11:29:57

标签: wpf xaml isenabled

我想监听WPF元素上IsEnabled属性的更改(这样我可以在每次更改时运行一些公共代码),而不必在每个窗口/页面中加载大量代码。

我还希望避免由于强事件侦听器而导致内存泄漏的任何潜在问题。我遇到过一些建议使用弱事件监听器等的文章,但对于看起来应该非常简单的事情来说,这看起来非常复杂。

我不想为了做到这一点而需要子类控件,因为我想要监听IsEnabled更改的几种控件类型(以及将来可能更多)。

有没有人想出一个更简洁的处理方式?

2 个答案:

答案 0 :(得分:4)

这个问题的一个简洁的解决方案是创建一个自定义附加属性并设置一个单向绑定与IsEnabled属性作为源:

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

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

答案 1 :(得分:4)

有一个Control.EnabledChanged事件