wpf之数据类型转换

前言

wpf中经常有这种需求,比如内存中存在一个Bool类型的变量,界面有个控件的背景色由内存中bool变量来控制,当变量为true时,界面为绿色;当变量为false时,界面为空色,这时直接使用数据绑定是不可行的,比如将界面控件的background属性和内存中的bool变量直接绑定这是不行的,所以需要数据转换作为桥梁。

1、数据转换实现

主要是通过实现IValueConverter接口来实现,该接口中存在Convert和ConvertBack两个方法

csharp 复制代码
 public class BoolToColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is bool)
            {
                SolidColorBrush bgBrush = ((bool)value) ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("GREEN")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("RED"));
                return bgBrush;
            }
            else
            {
                return new SolidColorBrush((Color)ColorConverter.ConvertFromString("RED"));
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is SolidColorBrush)
            {
                SolidColorBrush brush = value as SolidColorBrush;
                if(brush.Color ==Colors.Green   )
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return null;
            }
        }
    }

然后通过下面的代码将这个类转变为可通过key引用的资源。

csharp 复制代码
<Window.Resources>
        <local:BoolToColorConverter x:Key="BoolToColor"/>
    </Window.Resources>

最后看下面的代码中Button的Background属性和CheckBox 的IsChecked属性绑定,Converter={StaticResource BoolToColor}指定使用什么转换。

csharp 复制代码
<Window x:Class="wpf之转换器.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:wpf之转换器"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:BoolToColorConverter x:Key="BoolToColor"/>
    </Window.Resources>
    <Grid>
        <StackPanel Orientation="Vertical"  >
            <CheckBox  Height="50" x:Name="check_test" />
            <Button Height=" 100" Background="{Binding IsChecked,ElementName=check_test ,Converter={StaticResource BoolToColor}}" />
        </StackPanel >
    </Grid>
</Window>

1)当你选中CheckBox时,Button背景色变为绿色

2)当你取消选中CheckBox时,Button背景色变为红色

选中或者取消选中实际上调用的是Convert方法,将bool类型转为为颜色。

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》

2、《C#与PLC通信从入门到精通 》

3、《C# Modbus通信从入门到精通》

4、《C#Socket通信从入门到精通 》

5、《C# MES通信从入门到精通》

6、《winform控件从入门到精通》

7、《C#操作MySql数据库从入门到精通》

相关推荐
脑电信号要分类10 小时前
将多张图片拼接成一个pdf文件输出
pdf·c#·apache
njsgcs10 小时前
c# solidworks 折弯系数检查
开发语言·c#
格林威12 小时前
工业相机图像采集:Grab Timeout 设置建议——拒绝“假死”与“丢帧”的黄金法则
开发语言·人工智能·数码相机·计算机视觉·c#·机器视觉·工业相机
唐青枫12 小时前
C#.NET SignalR + Redis Backplane 深入解析:多节点部署与跨实例消息同步
c#·.net
bugcome_com14 小时前
WPF 命令 ICommand 从原理到实战
后端·wpf·icommand
FL16238631291 天前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
love530love1 天前
OpenClaw 手机直连配置全流程
人工智能·windows·python·智能手机·c#·agent·openclaw
bcbobo21cn1 天前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型
月巴月巴白勺合鸟月半1 天前
一次PDF文件的处理(一)
pdf·c#
大鹏说大话1 天前
Java 锁膨胀机制深度解析:从偏向锁到重量级锁的进化之路
开发语言·c#