WPF 自定义控件绑定自定义依赖属性失效问题的解决过程

文章讲述了如何让自定义按钮在鼠标悬停时背景色根据bool属性变化,尝试了TemplateBinding和Binding两种方法,遇到类型不兼容问题后,作者通过添加VM类属性并调整绑定方式解决了问题,但认为这种方法不够灵活。最后,作者分享了最终的解决方案,实现按钮颜色动态改变且仅需在使用该功能时添加属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:想让一个自定义按钮的鼠标IsMouseOver事件触发时,按钮的背景色根据自己一个属性(bool类型)表现出不同的颜色;

第一种写法:使用TemplateBinding,因为我看其他地方可以使用TemplateBinding绑定自己的属性:

就模仿绑定了自己定义的依赖属性:

这是样式写法:

运行中报错:

看起来像是这个属性类型不兼容(绑定关系:backcolor = 绑定 bool ,常理来说应该绑定的是一个颜色值);

第二种写法:使用Binding直接绑定依赖属性:

运行,毫无疑问又报错了:

分析一下:

 DownloadsidebarViewModel 是我的VM类,上面使用了这个自定义按钮控件,提示问题就是这个VM类上缺少IsPanelVisible属性,这里明白了一点:

分清楚是Binding还是TemplateBinding,Binding是绑ViewModel,TemplateBinding是绑自己

上面一句话不保证正确,没有深入学习研究,只是个人经验。

然后把属性添加进去:

成功运行,达到效果,但是想一下这样的话我只有有用到这个按钮,都要在VM类里面添加这个bool属性,就算我不用这个IsMouseOver事件也要加上,属实有点不合理。

又去搜索其他写法.....

最终写法:

参考http://t.csdnimg.cn/X6MIl

适配到我这里来就是这样写:

属实长了点,分行处理 ;

展示一下效果,想做动图有点麻烦也没有现成的动图软件,如果你有好用的推荐一下感激不尽:

这么糊啊,不过效果可以看出来,最左边两列侧边栏,鼠标滑过时前景色一样,背景色不一样,最外边是透明的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值