当前位置: 首页 > news >正文

5.2.3 WPF 中 XAML 文件 Converter 使用介绍

        Converter(转换器)在 WPF 数据绑定中扮演着重要角色,用于在源数据和目标属性之间进行值转换

        举例来说:我想用一个bool量来控制一个背景,为true时,显示红色;为false时背景用默认颜色。因此 Background="{Binding 某bool量}",这个bool量不是颜色值,怎么转换成颜色值?就需要一个继承自IValueConverter的转换器。见例子所示:

例一:bool量转换成颜色。

      注意需要先在window.Resources中把这个类引用过来。

      因为我这个转换类的命名空间就是这个定义的local中,可以直接写

 <local:BooleanToColorConverter x:Key="BooleanToColorConverter"/>

        如果命名空间不一致,则见例子2。

  最终效果如下:

<Window.Resources><local:BooleanToColorConverter x:Key="BooleanToColorConverter"/>
</Window.Resources>
<Grid><StackPanel  ><Border Height="50" Width="100" Background="{Binding BSetRed,Converter={StaticResource BooleanToColorConverter}, ConverterParameter=Red}"/><Button Content="反转颜色" Click="Button_Click"     /></StackPanel></Grid>
public class BooleanToColorConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if((bool)value){return parameter;}else{return DependencyProperty.UnsetValue;}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return (value == parameter);}
}
 public partial class Window1 : Window,INotifyPropertyChanged{bool bSetRed = false;public event PropertyChangedEventHandler PropertyChanged;public bool BSetRed { get => bSetRed;set { bSetRed = value;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("BSetRed"));} }public Window1(){InitializeComponent();DataContext = this;}private void Button_Click(object sender, RoutedEventArgs e){BSetRed = !bSetRed;}}

例2:bool量转换成颜色。转换类放到其他命名空间下,比如Common.

此时因local下找不到这个类,所以报警。

此时:追加一个common的命名空间。然后程序可以正常运行。

namespace AhuiPLC_CurveRecord.Common
{public class BooleanToColorConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if((bool)value){return parameter;}else{return DependencyProperty.UnsetValue;}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return (value == parameter);}}
}

相关文章:

  • 基于ACL方式手动建立站点间 IPSec 隧道
  • 牛客 verilog入门 VIP
  • 云原生后端架构:重塑后端开发的新范式
  • bert学习
  • JSON实现动态按钮管理的Python应用
  • ​​AI硬件遭遇“关税风暴“:中国科技企业如何破局?
  • Linux命令-tcpdump
  • 26.OpenCV形态学操作
  • CCF CSP 第37次(2025.03)(2_机器人饲养指南_C++)
  • UE5的 Modify Curve 蓝图节点
  • leetcode0099. 恢复二叉搜索树- medium
  • 约束constraint
  • Python删除Elasticsearch指定数据
  • 从 Vue 到 React:React.memo + useCallback 组合技
  • php 支付宝官方 Alipay Easy SDK
  • es的range失效
  • 【Docker】在Ubuntu平台上的安装部署
  • 无线监控系统分类全解析:搭配视频融合平台EasyCVR开启高效监控
  • 23种设计模式-结构型模式之组合模式(Java版本)
  • 黑马商城-微服务笔记
  • 2024年度全国十大考古新发现公布,武王墩一号墓等入选
  • 董明珠卸任格力电器总裁,张伟接棒
  • 涡虫首上太空,神舟二十号任务将开展3项生命科学实验
  • 对话上海外贸企业:关税战虽起,中国供应商却难以被取代
  • “80后”保利文化集团董事长王波挂职哈尔滨副市长,负责文旅、招商
  • 普京签署法律,诋毁俄军将面临最高7年监禁