WPF: 实现 disabled 时自动变灰的 Image

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

  用过 WinForms 的人都知道,如果一个 Button 或者 MenuItem 里包含了一个图片,那么当Button 或者MenuItem 被 disabled 时,包含的图片会自动变成灰色并且变淡。惊人的是,WPF 里并没有现成的这项功能;而且,摸索发现实现这个功能并不方便。以下就来归纳几种让Image 在 disabled 时自动变灰的解决方案。这里着重于图标的自动变灰效果。

方案一:采用两张图片

  最直截了当的方案是,对每一个图标,手工生成两张图片:一张是正常显示的图片,一张是 disabled 时的图片。当 IsEnabled 属性变化时,选择适当的图片来显示。

  这里一项有用的细节是,UIElement 类的IsEnabled 属性有一个特点,即如果 parent control 是 disabled,那么 child control 也自动就是 disabled;也就是说,包含在Button 或者MenuItem 里的 Image 控件只需要监测自己的 IsEnabled 属性就行了,而不需要去找Button 或者MenuItemIsEnabled 属性。

  优点:直截了当,容易理解;并且理论上可以选择一张毫不相干的图片在 disabled 时显示,尽管在实际操作中还是选择正常图片的灰色效果图为好。

  缺点:为每个图标管理两张图片,增加了管理的复杂性;增加执行文件的尺寸;而且在外部生成灰度图片也不见得方便。

方案二:正常图片本身是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值