WPF中一个通用的BoolToXXX转换类

在WPF程序的数据绑定里面,经常会通过一个布尔类型的值来控制UI控件的状态,例如是否可见,是否最大化之类的。然而UI控件的各个状态属性的类型往往不是布尔类型,比如UIElement.Visibility的类型是Visibility枚举,Window.WindowState的类型是WindowState枚举。以前我为了将布尔类型的数据绑定到这些可依赖属性的时候,经常要写很多ValueConverter,例如BoolToVisibilityConverter啦,BoolToWindowStateConverter啦,很麻烦。介绍一个通用的BoolToXXX转换类,这个类使用Binding对象的ConverterParameter和FallbackValue来实现布尔类型与任意值转换的功能。

ConverterParameter是数据绑定的时候UI传到ValueConverter的参数,比如要将一个字符串通过数据绑定转换成整数,可以通过ConverterParameter来指定按照十进制还是十六进制转换。而FallbackValue的作用是,当数据绑定不能提供一个有意义的数值的时候(通过返回DependencyProperty.UnsetValue这个值),数据绑定引擎就会使用FallbackValue里面指定的值。

先看看BoolToValueConverter的源代码:

 public class BoolToValueConverter : IValueConverter{#region IValueConverter Memberspublic object Convert(object value, Type targetType, object parameter, CultureInfo culture){if ((bool)value)return parameter;elsereturn DependencyProperty.UnsetValue;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return object.Equals(value, parameter);}#endregion}

上面的Convert函数,通过判断绑定的布尔值,如果为真(True),则使用Binding对象的ConverterParameter属性保存的值,如果为假(False),那么返回DependencyProperty.UnsetValue,这样就告诉数据绑定引擎,使用Binding对象的FallbackValue。而ConvertBack的作用就是为了判断 UI对象对应属性的值(例如UIElement.Visibility)是不是和预设的值(例如Visibility.Visible)相同,而返回相应的值。你也可以通过下面的代码来获知BoolToValueConverter的用法—请注意黄色加亮的部分:

BoolToValueTestWindow.xaml:<Window x:Class="ManualTestProject.WpfLibTest.BoolToValueTestWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:converter="clr-namespace:WpfLib.Converters;assembly=WpfLib"Title="BoolToValueTestWindow" Height="300" Width="300" x:Name="LayoutRoot"><Window.Resources><converter:BoolToValueConverter x:Key="BoolToValueConverter" /></Window.Resources><StackPanel><CheckBox IsChecked="{Binding ElementName=LayoutRoot, Path=BoolValue}"Content="Check box" /><Button Content="True"Visibility="{Binding ElementName=LayoutRoot, Path=BoolValue, Converter={StaticResource BoolToValueConverter}, ConverterParameter=Visible, FallbackValue=Collapsed}"x:Name="TrueButton" Click="TrueButton_Click"/><Button Content="False"Visibility="{Binding ElementName=LayoutRoot, Path=BoolValue, Converter={StaticResource BoolToValueConverter}, ConverterParameter=Collapsed, FallbackValue=Visible}"x:Name="FalseButton" Click="FalseButton_Click"/></StackPanel></Window>BoolToValueTestWindow.xaml.cs:public partial class BoolToValueTestWindow : Window{public bool BoolValue{get { return (bool)GetValue(BoolValueProperty); }set { SetValue(BoolValueProperty, value); }}public static readonly DependencyProperty BoolValueProperty =DependencyProperty.Register("BoolValue",typeof(bool),typeof(BoolToValueTestWindow),new UIPropertyMetadata(false));public BoolToValueTestWindow(){InitializeComponent();}private void TrueButton_Click(object sender, RoutedEventArgs e){BoolValue = false;}private void FalseButton_Click(object sender, RoutedEventArgs e){BoolValue = true;}}

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

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

相关文章

Cisco常用命令

Switch(config)#snmp-server community c2960 ro #设置snmp只读服务 Switch(config)#snmp-server enable traps #打开snmp陷阱 Switch(config)#snmp-server host 192.168.1.1 traps c2960 #指定接收traps信息的主机和共同体名 Switch(config)#logging on #启动logging机制 Sw…

到家自动充电,拜拜充电线!东京大学开发自动充电房间,能量成为“与空气一样的东西”...

全世界只有3.14 % 的人关注了青少年数学之旅每天下班回家第一件事&#xff0c;是不是给手机充电&#xff1f;但是充电线在哪&#xff0c;你找得到吗&#xff1f;如果现在告诉你&#xff0c;一回到家&#xff0c;手机就能自动充电&#xff0c;简直就是整理苦手的救星&#xff01…

JS图片放大查看效果!

http://bbs.blueidea.com/thread-2812683-1-1.htmlhttp://bbs.blueidea.com/thread-2814846-1-1.html应用效果<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><title>Javascript Images zoom-out view sample.…

从零开始学习jQuery (九) jQuery工具函数 【转】

一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 我们经常要使用脚本处理各种业务逻辑, 最常见的就是数组和对象的操作. jQuery工具函数为我们操作对象和数组提供了便利条件. 二.前言 大…

java获取整点与凌晨的时间戳

Java中获取整点时间戳 在实际的开发过程中&#xff0c;前端给后端传时间的时候&#xff0c;有时候传的是整点数值&#xff0c;比如&#xff1a;timeList[00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]&#xff0c;这样传值给后端获取时间带了…

设计模式之装饰器

装饰器模式介绍俄罗斯套娃装饰器的核心就是在不改原有类的基础上给类新增功能。可以避免继承导致的子类过多&#xff0c;可避免AOP带来的复杂性。装饰器主要解决的是直接继承下因功能的不断横向扩展导致子类膨胀的问题&#xff0c;而是用装饰器模式后就会比直接继承显得更加灵活…

zookeeper集群部署监控与选举同步流程等工作原理

部署一个zookeeper集群&#xff0c;要多简单就能有多简单&#xff08;下载压缩包&#xff0c;解压&#xff0c;修改配置文件zoo.cfg,执行启动脚本&#xff09;&#xff0c;但是想要真的把这套东西玩好了&#xff0c;还是需要费些功夫研究一番的。就跟自己搭建一个lnmp的站点&am…

手把手教出欧拉!数学界最伟大的老师惨遭全网歪曲抹黑,奇葩说陈铭一句话揭露真相.........

全世界只有3.14 % 的人关注了青少年数学之旅说到伟大的老师你首先想到的是谁&#xff1f;万世师表的孔子&#xff1f;古代先哲亚里士多德&#xff1f;支援山区的青年教师&#xff1f;还是高三时每天在你耳边督促你订正错题本的班主任&#xff1f;在这个光荣的行列中&#xff0c…

让你一周变聪明的大脑保健操

我们现在的年轻人生活节奏快&#xff0c;压力大&#xff0c;有时或多或少&#xff0c;有些跟不上节奏&#xff0c;这样更多的人就应该多重视一下自己的大脑&#xff0c;现在有一个这样的方法不知道是不是切合实际&#xff0c;希望大家能从中学到些自己有用的东西。 英国广播公司…

Hello Blazor:(8)启用深色模式

前言上次&#xff0c;在“集成Tailwind CSS”时&#xff0c;我发现tailwind.config.js配置文件有这样一个选项&#xff1a;darkMode: false, // or media or class查看官方文档&#xff0c;原来这是用来启用深色模式的配置。既然深色模式几乎成了所有网站和软件的标配&#xff…

初学ASP.NET 必看

初学者必看&#xff01; 所有的关键字和运算等一切有关的关键词的集合HTML文件标记<html><head><!--><title><body>文字排版标记<br/><nobr><p><pre> 原始文字样式<center><blockquote> 向内…

Java字符串的压缩与解压缩的两种方法

应用场景 当字符串太长&#xff0c; 需要将字符串值存入数据库时&#xff0c;如果字段长度不够&#xff0c;则会出现插入失败&#xff1b; 或者需要进行Http传输时&#xff0c;由于参数长度过长造成http传输失败等。 字符串压缩与解压方法 方法一&#xff1a;用 Java8中的…

超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?

全世界只有3.14 % 的人关注了青少年数学之旅今年8月的华为开发者大会上&#xff0c;鸿蒙OS正式亮相&#xff0c;这是全世界第一个基于微内核的全场景分布式操作系统。余承东曾表示&#xff1a;华为手机优先使用安卓生态&#xff0c;一旦受实体名单影响安卓不能用&#xff0c;一…

Java网页开发中model实现Serializable接口的原因

Object serialization的定义&#xff1a;Object serialization 允许你将实现了Serializable接口的对象转换为字节序列&#xff0c;这些字节序列可以被完全存储以备以后重新生成原来的对象。 serialization不但可以在本机做&#xff0c;而且可以经由网络操作&#xff08;RMI&…

关于 .NET 与 JAVA 在 JIT 编译上的一些差异

最近因为公司的一些原因&#xff0c;我也开始学习一些 JAVA 的知识。虽然我一直是以 .NET 语言为主的程序员&#xff0c;但是我并不排斥任何其它语言。在此并不讨论 JAVA .NET 的好坏&#xff0c;仅仅是对 .NET 跟 JAVA 程序的编译执行过程进行一些简单的介绍跟比较。因为有些内…

病毒加壳技术与脱壳杀毒方法解析

壳是什么&#xff1f;脱壳又是什么&#xff1f;这是很多经常感到迷惑和经常提出的问题&#xff0c;其实这个问题一点也不幼稚。当你想听说脱壳这个名词并试着去了解的时候&#xff0c;说明你已经在各个安全站点很有了一段日子了。下面&#xff0c;我们进入“壳”的世界吧。 一、…

java初学必看

今天又看到了这篇文章&#xff0c;不过今天看来&#xff0c;比当初有了更多的感受&#xff0c;对于初学者&#xff0c;的确是篇好文章&#xff0c;应该静下心来好好看看很多网友问我学习Java有没有什么捷径,我说"无他&#xff0c;唯手熟尔"。但是我却很愿意将自己学习…

在鹅厂,我作为一个Java 程序员每天都在摸鱼!!!

作为一名 在大、中、小微企业都待过 的 Java 开发者&#xff0c;今天和大家分享下自己在不同公司的工作日常和收获。包括一些个人积累的工作提升经验&#xff0c;以及一些 Java 学习的方法和资源。 先从我的第一份 Java 开发实习工作说起吧~ 实习生工作日常 我是在大二暑期开…

心中一万只草泥马在奔腾是种怎样的体验?| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源横店街道办主任&#xff0c;侵权删&#xff09;

iOS工程中的info.plist文件的完整研究

原地址&#xff1a;http://blog.sina.com.cn/s/blog_947c4a9f0100zf41.html 们建立一个工程后&#xff0c;会在Supporting files下面看到一个"工程名-Info.plist"的文件&#xff0c;这个是对工程做一些运行期配置的文件&#xff0c;很重要&#xff0c;不能删除。 如果…