WPF中值转换器的使用

什么是值转换器

在WPF(Windows Presentation Foundation)中,值转换器(Value Converter)是一种机制,允许你在绑定时转换绑定源和绑定目标之间的值。值转换器实现了 IValueConverter 接口,该接口包含两个方法:ConvertConvertBack。这两个方法分别用于在绑定源到目标时进行值转换,以及在目标到源时进行值转换。

使用值转换器的Demo

首先创建一个绑定数据源类:

using System;
using System.ComponentModel;namespace BindConversion
{public class MyData : INotifyPropertyChanged{private DateTime _thedate;public MyData(){_thedate = DateTime.Now;}public DateTime TheDate{get { return _thedate; }set{_thedate = value;OnPropertyChanged("TheDate");}}// Declare eventpublic event PropertyChangedEventHandler PropertyChanged;// OnPropertyChanged method to update property value in bindingprivate void OnPropertyChanged(string info){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(info));}}
}

有一个类型为DateTime的属性TheDate,该类实现了INotifyPropertyChanged接口。

再创建一个转换器类:

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;namespace BindConversion
{public class MyConverter : IValueConverter{public object Convert(object o, Type type,object parameter, CultureInfo culture){var date = (DateTime) o;switch (type.Name){case "String":return date.ToString("F", culture);case "Brush":return Brushes.Red;default:return o;}}public object ConvertBack(object o, Type type,object parameter, CultureInfo culture) => null;}
}

该类实现了IValueConverter接口。

IValueConverter介绍

image-20240208113026438

如果要将值转换器与绑定相关联,请创建实现 接口的 IValueConverter 类, Convert 然后实现 和 ConvertBack 方法。 转换器可以将数据从一种类型更改为另一种类型,根据文化信息转换数据,或修改演示文稿的其他方面。

值转换器具有区域性感知能力。 Convert和 ConvertBack 方法都有一个culture参数,用于指示区域性信息。 如果区域性信息与转换无关,则可以在自定义转换器中忽略该参数。

该接口有两个方法ConvertConvertBack

public object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture);

中各参数的含义如下所示:

参数类型含义
valueobject绑定源生成的值。
targetTypeType绑定目标属性的类型。
parameterobject要使用的转换器参数。
cultureCultureInfo要用在转换器中的区域性。

再看一下MainWindow.xaml:

<Window x:Class="BindConversion.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:BindConversion"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><StackPanel Width="300" Height="300" Name="Page1"><StackPanel.Resources><local:MyData x:Key="MyDataSource"/><local:MyConverter x:Key="MyConverterReference"/><Style TargetType="TextBlock"><Setter Property="FontSize" Value="15"/><Setter Property="Margin" Value="3"/></Style></StackPanel.Resources><StackPanel.DataContext><Binding Source="{StaticResource MyDataSource}"/></StackPanel.DataContext><TextBlock Text="Unconverted data:"/><TextBlock Text="{Binding Path=TheDate}"/><TextBlock Text="Converted data:"/><TextBlock Name="myconvertedtext"Foreground="{Binding Path=TheDate,Converter={StaticResource MyConverterReference}}"><TextBlock.Text><Binding Path="TheDate"Converter="{StaticResource MyConverterReference}"/></TextBlock.Text></TextBlock></StackPanel>
</Window>

首先定义了资源:

  <StackPanel.Resources><local:MyData x:Key="MyDataSource"/><local:MyConverter x:Key="MyConverterReference"/><Style TargetType="TextBlock"><Setter Property="FontSize" Value="15"/><Setter Property="Margin" Value="3"/></Style></StackPanel.Resources>

一个名为MyDataSource类型为MyData的资源与一个名为MyConverterReference类型为MyConverter的资源。

我们发现有三处地方用到了Binding

  <Binding Source="{StaticResource MyDataSource}"/>

这种形式我们已经见过了。

  <TextBlock Name="myconvertedtext"Foreground="{Binding Path=TheDate,Converter={StaticResource MyConverterReference}}">
  <Binding Path="TheDate"Converter="{StaticResource MyConverterReference}"/>

注意,这两处Binding中都出现了Converter

Converter介绍

image-20240208115242355

通过实现 IValueConverter 接口并实现 Convert 方法创建转换器。 该方法应返回一个对象,该对象的类型与绑定所面向的依赖属性的类型相同,或者至少返回一个可隐式强制转换或转换为目标类型的类型。

再结合这段代码:

 public object Convert(object o, Type type,object parameter, CultureInfo culture){var date = (DateTime) o;switch (type.Name){case "String":return date.ToString("F", culture);case "Brush":return Brushes.Red;default:return o;}}

根据目标类型的不同,进行不同的转换。

TextBlock.Foreground的类型为Brush就返回Brushes.Red

TextBlock.Text的类型为String就返回date.ToString("F", culture)

结果如下图所示:

image-20240208115712929

Demo代码来源

[WPF-Samples/Data Binding/BindConversion at main · microsoft/WPF-Samples⁤ (github.com)](https://github.com/microsoft/WPF-Samples/tree/main/Data Binding/BindConversion)

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

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

相关文章

剪辑思维大学习(Day5) - 剪辑时如何找到合适的音乐?!

目录 一、写在前面 二、关键词概括 1.找音乐前考虑什么&#xff1f; 2.常见的情绪关键词 3.常见的音乐风格关键词 三、思路总结 1.旅拍vlog/文旅宣传片 1&#xff09;.世界音乐/民族音乐 2&#xff09;.史诗音乐 3&#xff09;.中国传统乐器 2.炫酷/时尚/节奏感片子 …

【华为 ICT HCIA eNSP 习题汇总】——题目集12

1、企业网络内部常常采用私有 IP 地址进行通信&#xff0c;以下哪个地址属于私有 IP 地址&#xff1f; A、0.1.1.1 B、127.5.4.3 C、128.0.0.5 D、172.24.35.36 考点&#xff1a;网络层 解析&#xff1a;&#xff08;D&#xff09; A类 IP 地址中&#xff0c;10.0.0.0 ~ 10.255…

command的作用

int waitCommand(int waitFD) {uint32_t command0;ssize_t sread(waitFD,&command,sizeof(command));assert(ssizeof(uint32_t));return command; } 这段代码中的command是一个无符号32位整数变量&#xff0c;用于存储从文件描述符waitFD中读取的命令。函数waitCommand的作…

深入学习《大学计算机》系列之第1章 1.7节——图灵机的一个例子

一.欢迎来到我的酒馆 第1章 1.7节&#xff0c;图灵机的一个例子。 目录 一.欢迎来到我的酒馆二.图灵机2.1 艾伦-图灵简介2.2 图灵机简介 三.图灵机工作原理3.1 使用图灵机打印二进制数3.2 图灵机工作原理总结 四.总结 二.图灵机 本节内容主要介绍计算机科学之父——艾伦-图灵、…

Java学习-常用API-新增时间

1.学习JDK8新增时间的原因&#xff1f; 2.JDK8新增了那些时间&#xff1f; 代替calendar的 localDate localTime localDateTime 常用APi及代码示例&#xff1a; ZoneIdZonedDateTime 常用方法 代码示例&#xff1a; 代替Date的 Instant常见方法及其代码示例&#xff1a; 注…

权限提升:利用Linux漏洞提权

目录 Linux权限基础 Linux用户权限 Linux文件权限 特殊的Linux文件权限 Linux本机信息收集 利用Linux漏洞进行提权 脏牛漏洞 pkexec Linux权限基础 Linux用户权限 在Linux中&#xff0c;根据权限的不同&#xff0c;大致可以分为三种&#xff1a;超级用户&#xff08;…

Linux系统上部署网站

在Linux系统上部署网站通常涉及以下步骤&#xff1a; 1. **选择 Web 服务器**&#xff1a;常见的选择包括 Apache、Nginx 或 Lighttpd。这些服务器都支持在 Linux 上部署网站&#xff0c;并且各有优缺点。 2. **安装 Web 服务器**&#xff1a;使用包管理器&#xff08;如apt、…

C#,卢卡斯数(Lucas Number)的算法与源代码

1 卢卡斯数&#xff08;Lucas Number&#xff09; 卢卡斯数&#xff08;Lucas Number&#xff09;是一个以数学家爱德华卢卡斯&#xff08;Edward Lucas&#xff09;命名的整数序列。爱德华卢卡斯既研究了这个数列&#xff0c;也研究了有密切关系的斐波那契数&#xff08;两个…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月13日,星期二

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月13日 星期二 农历正月初四 1、 春节假期旅游爆火&#xff01;多地景区宣布门票售罄&#xff0c;建议错峰错区游览。 2、 中国旅游研究院&#xff1a;预计2024年全年国内旅游人数将超过60亿人次。 3、 应急管理部&#…

1.2 Verilog 简介及发展历史

Verilog 具有很强的电路描述与建模能力&#xff0c;能从多个层次对数字系统进行描述和建模。因此&#xff0c;在简化硬件设计任务、提高设计效率与可靠性、语言易读性、层次化和结构化设计等方面展现了强大的生命力与潜力。 发展历史 1983 年&#xff0c;Verilog 最初由 Gate…

Solidworks:从2D走向3D

Sokidworks 的强大之处在于三维实体建模&#xff0c;这个形状看似复杂&#xff0c;实际上只需要拉伸一次&#xff0c;再做一次减法拉伸就行了。第一次做三维模型&#xff0c;费了不少时间才搞明白。 接下来做一个稍微复杂一点的模型&#xff0c;和上面这个操作差不多&#xff0…

SpringBoot中的对象属性拷贝及MD5加密

目录 1 前言 2 属性拷贝 3 MD5加密 1 前言 属性拷贝常用于服务层之中dto和entity对象&#xff0c;如果使用get和set方法&#xff0c;那将过于麻烦。另外&#xff0c;我们可能需要使用MD5对密码之类的进行加密&#xff0c;如果手搓工具类&#xff0c;将同样麻烦。如果能够使…

基于Seaborn和Matplotlib的可视化案例分析

处理数据有时会有点无聊。将原始数据转换为可理解的格式是整个过程中最重要的部分之一&#xff0c;那么为什么只停留在数字上&#xff0c;当我们可以将数据可视化为令人兴奋的图表时&#xff0c;这些图表可以在python中获取。这篇文章将重点探索耐人寻味的预处理之旅。 Seabor…

SSM+SpringBoot框架

单例bean是线程安全的吗 AOP Spring事务失效 第四种&#xff0c;在方法内部使用&#xff0c;需要用代理类调用此方法 bean生命周期 bean的循环依赖 SpringMVC执行流程 、 SpringBoot自动配置原理 Spring常见注解 MyBatis执行流程 MyBatis延迟加载 MyBatis缓存

最新在线看4K高清电影网站推荐

随着互联网技术的发展&#xff0c;观看高清电影已经不再是难事。这里我为大家分享几个最新的在线看4K高清电影网站&#xff0c;让您在家就能享受到极致观影体验。 通过下面这个即可 1. 【超清影视】 【超清影视】是国内新兴的4K高清电影网站&#xff0c;拥有海量的影片资源&a…

000——对i.MAX6uLL进行开箱检查

目录 00外观检查 01有线网卡检查 02USB-host测试 03耳机测试 04按键测试 05查看CPU温度 00外观检查 看起来没什么问题&#xff0c;买了半年了刚开始要做 01有线网卡检查 开机启动正常&#xff0c;韦东山老师还写了个欢迎界面&#xff0c;这个我后面因为要用于毕业设计&am…

《Linux 简易速速上手小册》第5章: 用户与群组管理(2024 最新版)

文章目录 5.1 管理用户账户5.1.1 重点基础知识5.1.2 重点案例&#xff1a;创建一个新的开发者账户5.1.3 拓展案例 1&#xff1a;禁用用户登录5.1.4 拓展案例 2&#xff1a;设置账户到期 5.2 群组概念与管理5.2.1 重点基础知识5.2.2 重点案例&#xff1a;为项目团队设置群组5.2.…

797. 差分

Problem: 797. 差分 文章目录 思路解题方法复杂度Code 思路 这是一个差分数组的问题。差分数组的主要适用场景是频繁对原始数组的某一个区间进行增减操作。这种操作是区间修改操作&#xff0c;在这种操作下&#xff0c;差分数组只需要对区间的两个端点进行操作&#xff0c;时间…

Day31 贪心算法part01

本质&#xff1a;局部最优推导整体最优 摆动序列 class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:res []if len(nums) 1 or (len(nums) 2 and nums[0] nums[1]):return 1res.append(nums[1] - nums[0])r 2i 2while r < len(nums):multi num…

《Linux 简易速速上手小册》第3章: 文件系统与权限(2024 最新版)

文章目录 3.1 Linux 文件系统结构3.1.1 重点基础知识3.1.2 重点案例&#xff1a;设置一个 Web 服务器3.1.3 拓展案例 1&#xff1a;日志文件分析3.1.3 拓展案例 2&#xff1a;备份用户数据 3.2 理解文件权限3.2.1 重点基础知识3.2.2 重点案例&#xff1a;共享项目文件夹3.2.3 拓…