WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter

注:

需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同。

一、MultiBinding+Converter 多值绑定及多值转换实例

当纵向流量大于横向流量时指示灯应为绿色,当纵向流量小于横向流量时指示灯应为红色,否则指示灯为黄色。

1、定制ColorConverter类,此时Convert中参数是object[] values,values[0]对应MultiBinding中的第一个Binding值,这里是纵向流量值,依此类推,可以在MultiBinding对象中指定多个绑定。

public class ColorConverter : IMultiValueConverter
{
    //正向修改
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values == null || values.Length < 2)
            return DependencyProperty.UnsetValue;
        double verValue = (double)values[0];
        double horValue = (double)values[1];
        if (verValue > horValue)
            return new SolidColorBrush(Colors.Green);
        else if (verValue < horValue)
            return new SolidColorBrush(Colors.Red);
        return new SolidColorBrush(Colors.Yellow);
    }
    //反向修改
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        //返回空,标记不可双向转换
        return null;
    }
}

2.Xaml定义

添加命名空间

 xmlns:local="clr-namespace:AudioDemo.View"
<Window.Resources>
    <local:ColorConverter x:Key="cvtColor"/>
</Window.Resources>
<Grid>
    <Label x:Name="label" Content="纵向值:" HorizontalAlignment="Left" Margin="10,40,0,0" VerticalAlignment="Top"/>
    <Label x:Name="label1" Content="横向值:" HorizontalAlignment="Left" Margin="10,80,0,0" VerticalAlignment="Top"/>
    <Slider x:Name="sliderVer" HorizontalAlignment="Left" Margin="75,43,0,0" VerticalAlignment="Top" Width="192"/>
    <Slider x:Name="sliderHor" HorizontalAlignment="Left" Margin="75,81,0,0" VerticalAlignment="Top" Width="192"/>
    <Ellipse   HorizontalAlignment="Left" Height="100" Margin="75,120,0,0" Stroke="Black" VerticalAlignment="Top" Width="100">
        <Ellipse.Fill>
            <MultiBinding Converter="{StaticResource cvtColor}">
                <Binding Path="Value" ElementName="sliderVer"/>
                <Binding Path="Value" ElementName="sliderHor"/>
            </MultiBinding>
        </Ellipse.Fill>
    </Ellipse>
</Grid>

二、RGB颜色混合实例

1.转换器定义

public class RGBConverter : IMultiValueConverter
{
    //正向修改,整合颜色值
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values == null || values.Length < 3)
            return null;
        byte r = System.Convert.ToByte(values[0]);
        byte g = System.Convert.ToByte(values[1]);
        byte b = System.Convert.ToByte(values[2]);
        Color col = Color.FromRgb(r, g, b);
        SolidColorBrush brush = new SolidColorBrush(col);
        return brush;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return null;
    }
}

2.Xaml定义

别忘先添加命名空间

xmlns:local="clr-namespace:AudioDemo.View"
<Window.Resources>
    <local:RGBConverter  x:Key="rgbCvt"/>
</Window.Resources>
<Grid>
    <Label x:Name="label" Content="Red:" HorizontalAlignment="Left" Margin="10,48,0,0" VerticalAlignment="Top"/>
    <Label x:Name="label_Copy" Content="Green:" HorizontalAlignment="Left" Margin="7,85,0,0" VerticalAlignment="Top"/>
    <Label x:Name="label_Copy1" Content="Blue:" HorizontalAlignment="Left" Margin="7,123,0,0" VerticalAlignment="Top"/>
    <Slider x:Name="slider_r" Minimum="0" Maximum="255" Ticks="1"   HorizontalAlignment="Left" Margin="68,53,0,0" VerticalAlignment="Top" Width="207"/>
    <Slider x:Name="slider_g" Minimum="0" Maximum="255"  Ticks="1" HorizontalAlignment="Left" Margin="68,91,0,0" VerticalAlignment="Top" Width="207"/>
    <Slider x:Name="slider_b" Minimum="0" Maximum="255"  Ticks="1" HorizontalAlignment="Left" Margin="68,124,0,0" VerticalAlignment="Top" Width="207"/>
    <Rectangle  HorizontalAlignment="Left" Height="90" Margin="68,160,0,0" Stroke="Black" VerticalAlignment="Top" Width="142">
        <Rectangle.Fill>
            <MultiBinding Converter="{StaticResource rgbCvt}">
                <Binding ElementName="slider_r" Path="Value"></Binding>
                <Binding ElementName="slider_g" Path="Value"></Binding>
                <Binding ElementName="slider_b" Path="Value"></Binding>
            </MultiBinding>
        </Rectangle.Fill>
    </Rectangle>

</Grid>

运行结果:

更多参考:WPF Binding值转换器ValueConverter使用简介(一)

时间: 2024-10-02 20:03:07

WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter的相关文章

WPF Binding值转换器ValueConverter使用简介(一)

WPF.Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异的,此时我们就需要定制自己的Converter. .Net Framework提供了两种Converter接口,单值转换的接口IValueConverter和多值转换的接口IMultiValueConverter,它们都属于System.Windows.Data命名空间,在程序集Presentati

【值转换器】 WPF中Image数据绑定Icon对象

原文:[值转换器] WPF中Image数据绑定Icon对象 ? ? ? ?这是原来的代码: ? ? ? ?<Image Source="{Binding MenuIcon}" ?/> ? ? ? ?这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico". ? ? ? ?我遇到的问题是,同事已经封装好的类中的MenuIcon是Icon对象,并不是一个相对或者绝对的路径,另外WPF里也没有可以直接表示Icon对象的控

WPF值转换器

一.摘要 本文通过实例演示WPF值转换器的应用,并在演示过程中,对WPF值转换器的相关知识点进行解释说明. 二.实例演示 1 新建WPF应用程序ConverterExp,程序结构如下图所示. 图1 程序结构图 程序的主画面如下图所示. 图2 程序主画面 程序完成功能: 通过改变画面中ComboBox控件的选中项来改变TextBlock控件的Background值. ComboBox控件的下拉列表中可供选择的项有"red""green"和"blue"

wpf值转换器IValueConverter例子

转载:http://blog.163.com/[email protected]/blog/static/37140526201085113430862/ 值转换器可以把一种类型转换成另一种类型.例如,绑定到一个代表图片地址的字符串,希望显示的是图片,将数据存储为浮点类型,但通过货币的形式呈现:还有将日期存储成DateTime格式,在界面上显示时使用Calender控件等.下面写一个简单的例子,获得系统当前的时间,显示”now is 2010-xx-xx xx:xx;xx”.xaml的代码: 1

WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置binding对象的方法名得知: public static BindingExpressionBase SetBinding( DependencyObject target, DependencyProperty dp, BindingB

WPF(4)类型转换器和标记扩展

介绍 之前讨论了WPF的基础架构,然后逐步开始学习布局面板,转换,介绍了不同的控件,容器,UI转换等.在这篇文章中,我将讨论每个创建XAML应用前的开发人员应该了解的关于XAML最重要的东西. 标记扩展是一种对XAML的扩展,你可以用来对基于XAML的程序应用自定义的规则.在你的设计中,你如果有任何的想对你的程序施加的自定义行为,你都可以使用标记扩展来实现.这里我们将讨论你可以怎样使用标记扩展对XAML生成自定义的行为. XAML或者说可扩展应用程序标记语言实际上是一种定义了特殊架构的XML格式

Application简介(二)--重写应用程序的生命周期事件

Application类为应用程序的创建和终止.低可用内存和配置改变了事件处理程序,通过重写以下这些方法,可以为上述几种情况实现自己的应用程序行为: 1.onCreate:在创建应用程序时调用这个方法.可以重写这个方法来实例化应用程序单态,也可以创建和实例化任何应用程序状态变量或共享资源. 2.onLowMemory:这个方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存时调用.可以重写这个处理程序来清空缓存或者释放不必要的资源. 3.onTrimMemory:作为onLowMemor

Amazon DynamoDB 简介(二)

在DynamoDB中,database是table的集合,table是item的集合,item是attribute的集合.attribute是name-value对.value可以是单值属性也可以是多值属性(集合).一个item的大小不能超过64KB.理解了这个你就入门了. 另外,DynamoDB为了支持更为丰富的查询,提出了二级索引的思想,可以在表中创建一个或多个二级索引,并对这些索引发出 Query 请求.有两种类型的二级索引: 本地二级索引(Local Secondary Indexes)

WPF中的多进程(Threading)处理实例(二)

原文:WPF中的多进程(Threading)处理实例(二) 1 //错误的处理 2 private void cmdBreakRules_Click(object sender, RoutedEventArgs e) 3 { 4 Thread thread = new Thread(UpdateTextWrong); 5 thread.Start(); 6 } 7 8 private void UpdateTextWrong() 9 { 10 txt.Text = "Here is some n