用过 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 属性。
优点:直截了当,容易理解;并且理论上可以选择一张毫不相干的图片在 disabled 时显示,尽管在实际操作中还是选择正常图片的灰色效果图为好。
缺点:为每个图标管理两张图片,增加了管理的复杂性;增加执行文件的尺寸;而且在外部生成灰度图片也不见得方便。

本文探讨了在WPF中让Image控件在disabled状态时自动变灰的四种方法:使用两张图片、原图是灰度图片、自定义转换彩色图片和应用渲染效果。方案三——从Image派生自定义控件实现灰度转换,被认为是最佳实践,因为它简单直观且适用于彩色图片。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



