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数据库从入门到精通》

相关推荐
光泽雨2 小时前
动画生命周期
c#·wpf
波力海苔夹心脆6757 小时前
C# StringBuilder 详解:字符串拼接为什么总说要用它?
开发语言·笔记·c#·.net·字符串·stringbuilder·入门教程
淡海水7 小时前
06-03-源码-时间分片与调度策略
unity·c#·gc
丑梨数据7 小时前
法律合同知识库怎么搭:从图片压缩到私有化 RAG 的工程笔记
开发语言·笔记·c#
1-1=08 小时前
.NET Core 输出日志
c#·.net·.netcore
曹牧8 小时前
C#里引用ActiveX控件
开发语言·c#
宇卿.9 小时前
C#委托详解
开发语言·c#
努力,努力再努力9 小时前
零依赖 C# Office 库到底怎么用——四个场景讲透 Wisdom.Office
c#
2501_9307077813 小时前
使用C#代码在 PDF 文档中创建交互操作
pdf·c#·交互
zimoyin1 天前
在 C# 里嵌入 JavaScript:用 Jint 做可热更新的自动化脚本(从入门到踩坑)
javascript·c#·自动化