用过 WinForms 的人都知道,如果一个 Button
或者 MenuItem
里包含了一个图片,那么当Button
或者MenuItem
被 disabled 时,包含的图片会自动变成灰色并且变淡。惊人的是,WPF 里并没有现成的这项功能;而且,摸索发现实现这个功能并不方便。以下就来归纳几种让Image
在 disabled 时自动变灰的解决方案。这里着重于图标的自动变灰效果。
方案一:采用两张图片
最直截了当的方案是,对每一个图标,手工生成两张图片:一张是正常显示的图片,一张是 disabled 时的图片。当 IsEnabled
属性变化时,选择适当的图片来显示。
这里一项有用的细节是,UIElement
类的IsEnabled
属性有一个特点,即如果 parent control 是 disabled,那么 child control 也自动就是 disabled;也就是说,包含在Button
或者MenuItem
里的 Image
控件只需要监测自己的 IsEnabled
属性就行了,而不需要去找Button
或者MenuItem
的 IsEnabled
属性。
优点:直截了当,容易理解