在Wpf元素上侦听IsEnabled的更改

fub*_*aar 6 wpf xaml isenabled

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

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

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

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

use*_*471 5

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

<Control IsEnabled={Binding IsEnabledProperty}
         AttachedProperty={Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Mode=OneWay}"/>
Run Code Online (Sandbox Code Playgroud)

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


And*_*eas 5

有一个Control.EnabledChanged事件

  • 实际上,它名为IsEnabledChanged。 (3认同)