WPF使用转换器(Converter)

摘要:
1.作用:可以将源数据和目标数据之间进行特定的转化,2.定义转换器,需要继承接口IValueConverter[ValueConversion(typeof(int),typeof(string))]publicclassForeColorConverter:IValueConverter{//源属性传给目标属性时,调用此方法ConvertBackpublicobjectConvert(objec

1.作用:可以将源数据和目标数据之间进行特定的转化,

2.定义转换器,需要继承接口IValueConverter

    [ValueConversion(typeof(int), typeof(string))]
    public class ForeColorConverter : IValueConverter
    {
        //源属性传给目标属性时,调用此方法ConvertBack
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int c = System.Convert.ToInt32(parameter);
            if (value == null)
                throw new ArgumentNullException("value can not be null");
            int index = System.Convert.ToInt32(value);
            if (index == 0)
                return "Blue";
            else if (index == 1)
                return "Red";
            else
                return "Green";
        }
        //目标属性传给源属性时,调用此方法ConvertBack
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return null;
        }
    } 


public ValueConversionAttribute(Type sourceType, Type targetType):指定源属性类型和目标属性类型

Convert:会进行源属性传给目标属性的特定转化

ConvertBack:会进行目标属性传给源属性的特定转化

参数parameter:对应Binding的ConverterParameter属性

3.使用转换器

(1)引用转换器所在的命名空间

xmlns:local1="clr-namespace:WpfTest.View"

(2)定义资源

    <Window.Resources>
        <local1:ForeColorConverter x:Key="foreColor"></local1:ForeColorConverter>
    </Window.Resources>

(3)定义属性

        private int status = 0;
        public int Status
        {
            get => status; set { status = value; RaisePropertyChanged("Status"); }
        }

(4)绑定属性,添加转换器

    <Grid>
        <Label HorizontalAlignment="Left"   Margin="243,208,0,0" Content="这里哦" Foreground="{Binding Status,Converter={StaticResource foreColor},Mode=OneWay}" VerticalAlignment="Top"  />
        <TextBox x:Name="tbName" HorizontalAlignment="Left"   Margin="243,160,0,0" TextWrapping="Wrap" Text="{Binding Status,UpdateSourceTrigger=LostFocus,Mode=OneWayToSource}" VerticalAlignment="Top"  />
        <Button Content="Button" HorizontalAlignment="Left" Margin="389,160,0,0" VerticalAlignment="Top"  />
    </Grid>

4.效果

WPF使用转换器(Converter)第1张WPF使用转换器(Converter)第2张

WPF使用转换器(Converter)第3张

免责声明:文章转载自《WPF使用转换器(Converter)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle ORA-02292: 违反完整约束条件Akka源码分析-深入ActorRef&amp;amp;ActorPath下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用WPF动态生成Code 39条形码

最近在看些条形码方面相关的资料,而如果只是看的话,效果似乎并不怎么好,所以决定动手做点Demo,以增强对相关知识的记忆。 这里是一个我编写的使用WPF生成Code 39的例子,Code 39的编码很简单,故而第一次先用它做为尝试。 标准的Code 39只支持43个字符,0~9,A~Z,-,.,$, /, +, %以及空格。除此之外,*用于起始和终止符号。而...

WPF知识点全攻略06- WPF逻辑树(Logical Tree)和可视树(Visual Tree)

介绍概念之前,先来分析一段代码: xaml代码如下: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.micros...

WPF界面设计—撸大师

WPF界面设计,模仿了金山卫士,360,鲁大师的界面! <!--无边框窗体--> <Style x:Key="NoResize_window" TargetType="{x:Type Window}"> <Setter Property="AllowsTransparency" Value=...

WPF Dispatcher.BeginInvoke子线程更新UI

在开发WPF应用时出现:”调用线程无法访问此对象,因为另一个线程拥有该对象。“ 是因为UI线程是WPF应用的主线程,若尝试子线程更新UI线程应使用Dispatcher.BeginInvoke()或者Invoke()方法。 Dispatcher.BeginInvoke() //异步执行,不等待委托结束就更新 Dispatcher.Invoke()     ...

Wpf之Xaml属性值和特性值(一)

其实我一直很好奇在xaml中,通过Attribute=Value这种方式可以进行对元素的描述, 例如: <Rectangle Name=” rectangle” Fill=”Blue”/> 这是一个矩形,并且利用蓝色来填充。我们知道在wpf中给UI元素上色可以用Brush(画刷),在MSDN中得知Rectangle.Fill就是一个Brush类...

【转】WPF之DataGrid应用

前几天打算尝试下DataGrid的用法,起初以为应该很简单,可后来被各种使用方法和功能实现所折磨。网络上的解决方法太多,但也太杂。没法子,我只好硬着头皮阅览各种文献资料,然后不断的去尝试,总算小有成果。因此,把我学到的和大家分享一下,相信这篇文章会让你再很短的时间内学会DataGrid的大部分主要功能,而且很多难点都可以在里面找到解决方案。 由于涉及的应用...