想写一个checkbox,由border和textblock组成。通过一个变量控制textblock的文字内容和背景色
文字转化器直接返回string就行, 但颜色转化器最开始是以为返回Color属性。
因此尝试了:
一、
https://www.cnblogs.com/yangfengwu/p/6135941.html
1.创建Color实例的参数成份为4种颜色成份
Color c = Color.FromArgb(100,200,200,200);//第1个参数为透明度(alpha)参数,其后为红,绿和蓝.
2.只接受红,绿,蓝三种原色,透明度设置为默认,即完全不透明.
Color结构的各属性颜色对照表
https://www.cnblogs.com/tracine0513/p/3611309.html
但一直没成功,后面看到
https://blog.csdn.net/huhbca/article/details/79331884
方法五:
Brush br = new SolidColorBrush(Color.FromArgb(A, R, G, B));
buttonName.Background = br;
才知道返回brush才能给background等属性。
二、
接着,在样式中,因为每个控件的background需要绑定不同的变量,因此需要用到TemplateBinding
但看了几篇相关文章并没有明白(其实是基础缺太多没沉下心看)
C# WPF的Binding使用说明
https://www.cnblogs.com/yzw123/p/15503559.html
WPF快速入门系列(2)——深入解析依赖属性
https://www.cnblogs.com/zhili/p/WPFDependencyProperty.html
WPF样式(Style)入门
https://blog.csdn.net/qq_34802416/article/details/78231575
在看到下面的内容
https://www.cnblogs.com/wesson2019-blog/p/13152503.html
于是在经过尝试后发现,TemplateBinding就是和最终(样式目标)控件的属性直接绑定,只要传递对象的属性一致就行
所以像checkbox样式中的textblock的Text="{TemplateBinding Content}"。因为checkbox属性只有content
那么Background="{TemplateBinding Background}"就ok了
三、关于Color.FromArgb()的alpha以及阴影引发的无奈bug
在设置好样式遇到另一个问题就是用Color.FromArgb()显示的颜色比参考颜色表的淡很多,而且加上DropShadowEffect后本来的颜色会加深
甚至用上了ps取颜色rgb值,最终显示的颜色还是淡
甚至还搜了
到最后从怀疑自己眼睛到怀疑自己电脑屏幕,折腾了一个来小时
猛然发现转化器里
因为Color.FromArgb()是直接从网上粘过来的,对,用的就是一里面的那个Color c = Color.FromArgb(100,200,200,200)
真又是被自己蠢哭的一天
四、
最后对控件的手感做了优化,原本checkbox的选择框是用border画的⚪
但是没法点⚪来选中,只能通过点文字,所以一直以为只能点文字选中。
在一次偶然点击⚪也选中后,发现其实是能通过⚪选中了
遂意识到不是不能点,是border画的⚪是空心的,只能点圆圈
直接给border加上background就毫无问题了
收工过周末鸟!