其他分享
首页 > 其他分享> > 22.1.7 样式的TemplateBinding以及转化器颜色转化

22.1.7 样式的TemplateBinding以及转化器颜色转化

作者:互联网

想写一个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就毫无问题了

 

 

收工过周末鸟!

 

标签:200,TemplateBinding,https,Color,转化,22.1,FromArgb,com
来源: https://www.cnblogs.com/rinroll/p/15776002.html