Binding(三):资源和ValueConverter

    这节讲资源和值转换器(ValueConverter)。

资源

    在XAML中,我们想要使用外部的数据或者类,需要引入其命名空间,然后将其定义为XAML页面的资源,供给控件使用,或者我们需要封装一个共用的样式,同样也需要定义成资源来使用,下面我们看一下如何定义一个资源:

<Window.Resources><ResourceDictionary><sys:String x:Key="show">我是一个资源</sys:String><Style x:Key="styleShow" TargetType="Button"><Setter Property="Background" Value="Purple" /><Setter Property="Foreground" Value="White" />
</Style></ResourceDictionary>
</Window.Resources>

    资源的类型是ResourceDictionary,顾名思义,资源是用键值对存储的,所以定义资源时需要给它个key,这个Key的value则根据定义资源的不同千变万化了,像上方代码中,定义一个string资源,它的value就是一个普通的字符串,定义一个样式资源,它的value就是一个定义样式的setter对象。

    那定义资源后,如何使用呢,这就又要用到标记扩展语法了,请看下面的代码:

<StackPanel><Button Content="{StaticResource show}" Style="{StaticResource styleShow}" />
</StackPanel>

    使用StaticResource命令获取一个资源,后面接资源的key,我给这个button引入了上方定义的资源,运行效果如下:

    另外,除了StaticResource,还有一个DynamicResource命令,StaticResource在程序一开始加载一次,如果资源中途变动,是不会再更新到使用它的控件上的,而DynamicResource则相反,它会跟着资源的更新而更新,所以要合理使用两者。

    后台代码中,声明资源和获取资源就简单多了,代码如下:

this.Resources.Add("show", "我是个资源");//定义资源
object data = this.Resources["show"];
this.FindResource("show");

    后台无非就是操作键值对集合,并且我们也可以使用FindResource方法来寻找资源。

ValueConverter

    上节我们提到一个情景,将Button的显示与隐藏跟CheckBox是否选中做绑定,这个就需要用到我们接下来讲的ValueConverter。

    首先我们需要新建一个类,代码如下:

class BoolToVisibilityConvert : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value == null)return DependencyProperty.UnsetValue;if ((bool)value == true){return Visibility.Visible;}else return Visibility.Collapsed;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value == null)return false;if ((Visibility)value == Visibility.Visible){return true;}else return false;}
}

     使用ValueConverter需要实现IValueConverter接口,其内部有两个方法,Convert和ConvertBack。我们在使用Binding绑定数据的时候,当遇到源属性和目标控件需要的类型不一致的,就可以使用ValueConverter,它就相当于一个桥,当数据从源到目标控件时,需要走Convert方法,我们在这个方法里边就可以自定义转换逻辑,当数据从目标控件到源时,需要走ConvertBack方法,我们可以在这里边自定义回转逻辑。

    上述代码中,我就实现了Button的Visibility属性和bool之间的转换,下面我们需要将这个类作为资源,载入XAML页面,让Button使用,代码如下:

<Window.Resources><ResourceDictionary><local:BoolToVisibilityConvert x:Key="B2V" /></ResourceDictionary>
</Window.Resources>

    这个ValueConverter类的命名空间就是当前项目的命名空间,所以直接使用local即可,local是默认代表当前代码的命名空间简称,具体相关XAML命名空间的知识参见前文:剖析XAML语言。

    XAML代码如下:

<StackPanel><CheckBox x:Name="CB" Click="CheckBox_Click" /><ButtonContent="{StaticResource show}"Style="{StaticResource styleShow}"Visibility="{Binding ElementName=CB, Path=IsChecked, Converter={StaticResource B2V}}" />
</StackPanel>

    程序运行效果如下:

       最后来解释一下转换方法的四个参数,第一个就是数据,我们要转换的值就是它,第二个参数是目标类型,当从bool转换为Visibility时,这个参数就是Visibility,反之则是bool,第三个参数是转换参数,可以在标记扩展中定义,第四个是文化参数,也是可以在扩展标记中定义,详见如下:

Visibility="{Binding ElementName=CB, Path=IsChecked, Converter={StaticResource B2V},ConverterParameter=true,ConverterCulture=zh-CN}"

     第三个参数主要是提供一些转换上的辅助,带给我们用于转换的更多的信息,第四个我个人理解多用在国际化上,我们可以根据这个参数获取当前的语言环境,这两个都不是扩展属性,都不能使用标记扩展。

本节到此结束,喜欢就点个在看吧...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 overflow_C语言和其他语言的不得不说的差别!

提到C语言&#xff0c;我们知道c语言和其他高级语言的最大的区别就是C语言是要操作内存的&#xff01;我们需要知道——变量&#xff0c;其实是内存地址的一个抽像名字罢了。在静态编译的程序中&#xff0c;所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的…

html省市区选择器代码,js实现一个省市区三级联动选择框代码分享

运行效果&#xff1a;部分代码&#xff1a;当然首先你数据库中要有这个table&#xff0c;不然你没有数据.....^_^所在地:${xzqh.province}js代码&#xff1a;/*** 加载市**/function loadCity() {var provinceId $("#provinceSelect option:selected").val();if(pro…

做人开心最重要

做人开心最重要 转载于:https://www.cnblogs.com/LeeWenjie/archive/2006/11/23/569502.html

你和学霸的差距,不只是成绩

教育不是只有在校园学习不是只有课堂阅读不是只有书上这几个移动的课堂&#xff0c;可以让大家随时关注它们带你学习更多知识【关注方式 】1 - 搜索公众号ID关注2 - 长按二维码识别关注数学好物ID: webaoming简介&#xff1a;“数学好物”是一个致力为数学爱好者与家长&#x…

Storyboard.storyboard could not be opened. Could not read the archive.

Storyboard.storyboard could not be opened. Could not read the archive. Please use a newer version of Xcode. Consider changing the documents Development Target to preserve compatibility. 用低版本xcode打开高版本xcode下创建的项目时会出现这个错误。 解决办法&a…

Binding(二):控件关联和代码提升

上节我们讲到&#xff0c;使用Binding&#xff0c;我们可以关联后台代码中的属性&#xff0c;在某些情况下&#xff0c;我们可能需要将两个控件关联起来&#xff0c;借助Binding&#xff0c;我们也可以轻松的实现。关联控件设想这样一个场景&#xff0c;界面中有个CheckBox&…

众望所归!中国机器狗能【后空翻】了。。。

全世界只有3.14 % 的人关注了青少年数学之旅在北京亦庄举办的世界机器人大会昨天结束了&#xff0c;这次大会上明显的感觉机械狗多了不少&#xff0c;中瑞福宁展示了四足多用途机器人Anymal&#xff0c;深度学习加持爬行、走路、跑步、跳舞样样精通&#xff1a;上楼梯的Anymal算…

男人别让爱你的女孩流泪

曾经以为付出就会有回报&#xff0c;付出才知道&#xff0c;在她的心里我始终不是最重要&#xff0c;无可奈何花落去&#xff0c;似曾相识燕归来。 经年少轻狂的我不知道什么是珍贵&#xff0c;直到有天&#xff0c;我回忆过去&#xff0c;我才知道眼泪的味道是咸的…… 第一次…

Binding(一):数据绑定

这节开始分几期来讲一下WPF中Binding的相关用法&#xff0c;本节主要讲使用Binding进行数据绑定。Binding的作用在WinForm中&#xff0c;我们要想对控件赋值&#xff0c;需要在后台代码中拿到控件对象进行操作&#xff0c;这种赋值形式&#xff0c;从根本上是无法实现界面与逻辑…

世纪渣男何书桓! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;渣男&#xff0c;实锤&#xff01;↓ ↓ ↓

你也可以搞懂的微服务第一篇——来自ThoughtWork的学习体验

????欢迎点赞 &#xff1a;???? 收藏 ⭐留言 ???? 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;????本文作者&#xff1a;由webmote 原创&#xff0c;首发于 【掘金】????作者格言&#xff1a;生活在于折腾&#xff0c;当你不折…

laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地

JosephSilber/page-cache Laravel 静态页面缓存2020-02-26 09:39:53Laravel 页面缓存这个包允许您轻松地将响应缓存为磁盘上的静态文件&#xff0c;以便更快速地加载页面。包管理地址&#xff1a;安装&#xff1a;用 composer 安装 page-cache 包&#xff1a;composer require …

pca 累积方差贡献率公式_机器学习数据降维方法:PCA主成分分析

PCA在机器学习中很常用&#xff0c;是一种无参数的数据降维方法。PCA步骤&#xff1a;将原始数据按列组成n行m列矩阵X将X的每一行(代表一个属性字段)进行零均值化&#xff0c;即减去这一行的均值求出协方差矩阵求出协方差矩阵的特征值及对应的特征向量将特征向量按对应特征值大…

教程丨亿万网友一起换头像欢庆新中国成立70周年,就差你了!

全世界只有3.14 % 的人关注了青少年数学之旅眼看着2019年国庆节马上要到了大街小巷都挂起来显眼的国旗而今天早上朋友圈更是被“国旗”刷屏一打开朋友圈满屏的国旗微信头像不少网友们都以为只要在朋友圈“微信官方”就能获取定制国旗头像虽说这是一个官方的彩蛋但实际上并不是这…

如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent

公司一台TMG服务器更换为新服务器&#xff0c;安装部署完TMG2010后&#xff0c;再安装Backup Exec 2010 Remote Agent时无法通过推送方法安装成功&#xff0c;出现如下错误提示&#xff1a; 此时&#xff0c;只好通过手动方法在TMG服务器上安装Be Agent。 登录TMG服务器&#x…

如何在 C# 9 中使用record类型?

原文链接&#xff1a;https://www.infoworld.com/article/3607372/how-to-work-with-record-types-in-csharp-9.html原文标题&#xff1a;How to work with record types in C# 9翻译&#xff1a;沙漠尽头的狼(谷歌翻译加持)利用 C# 9 中的record类型来构建不可变类型和线程安全…

巧用TensorFlow实现图像处理

经过几年的发展&#xff0c;深度学习方法摧枯拉朽般地超越了传统方法&#xff0c;成为人工智能领域最热门的技术。谷歌、亚马逊、百度、Facebook 纷纷开源了自己的深度学习框架。而支撑AlphaGo的核心技术架构&#xff0c;TensorFlow&#xff0c;以其一鸣惊人的绝对表现&#xf…

微软面向初学者的机器学习课程:1.4-机器学习技术

写在前面&#xff1a;最近在参与microsoft/ML-For-Beginners的翻译活动&#xff0c;欢迎有兴趣的朋友加入&#xff08;https://github.com/microsoft/ML-For-Beginners/issues/71&#xff09;机器学习技术构建、使用和维护机器学习模型及其使用的数据的过程与许多其他开发工作流…

四川大学计算机科学与技术专业分数线,2015年四川大学计算机科学与技术硕士考研复试分数线是290分...

2015年四川大学计算机科学与技术硕士考研复试分数线是290分 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分2015 年四川大学计算机科学与技术硕士考研复试分数线是 290 分2015 年四川大…

一个男人逐渐变心的过程。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;渣男&#xff0c;实锤&#xff01;↓ ↓ ↓