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

相关推荐
Macbethad1 天前
如何用WPF做工控设置界面
java·开发语言·wpf
csdn_aspnet1 天前
WPF 做一个简单的电子签名板(一)
c#·wpf
玖笙&1 天前
✨WPF编程进阶【7.2】:动画类型(附源码)
c++·c#·wpf·visual studio
她说彩礼65万1 天前
C# 容器实例生命周期
开发语言·c#
·心猿意码·1 天前
WPF中TemplatePart机制详解
wpf
清风与日月1 天前
c# 集成激光雷达(以思岚A1为例)
开发语言·c#
无极小卒1 天前
如何在三维空间中生成任意方向的矩形内部点位坐标
开发语言·算法·c#
the白勺2 天前
RabbitMQ-基础-总结
开发语言·c#
专注VB编程开发20年2 天前
C#VB.NET中实现可靠的文件监控(新建、删除、改名、内容修改等事件的准确捕获)
spring·c#·.net·文件监控
yi碗汤园2 天前
【一文了解】C#反射
开发语言·unity·c#