WPF系列(二)数据转换
来源:互联网 发布:免费好用的mac清理软件 编辑:程序博客网 时间:2024/06/05 09:10
WPF中的依赖属性绑定对象时,如果数据类型不一致,会发生数据转换,比如int 转string 等,这些WPF会帮我们做好,但是如果是比较负杂的类型,比如bool类型转换成 Visibility,就不行了。这时候我们需要自定义转换的类。
这里还是以一个自定义控件的示例来进行说明。
自定义控件调音台SingnalLight,实现功能(示例程序摘自鱼哥的地盘)
- 接收来自外部的范围0~100的数值
- 实时显示接收数值
- 列表内容
- 数值范围0~50显示绿色,50~85显示黄色,85~100显示红色,没有数值显示褐色
可在父控件上拖拽该控件
其中数值范围0~50显示绿色,50~85显示黄色,85~100显示红色,没有数值显示褐色这个功能就是使用的数据转换功能。以下是源代码
public class SingnalLightStatusConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { SolidColorBrush result = Brushes.Transparent; if (value.GetType() == typeof(int)) { var color = System.Convert.ToInt32(value); if (color < 50) result = Brushes.Green; else if (color < 85 && color >= 50) result = Brushes.Yellow; else if (color <= 100 && color >= 85) result = Brushes.Red; else result = Brushes.Gray; } return result; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
需要实现IValueConverter接口。我们来看一下,.NET中是如何对IValueConverter接口进行说明的。
// // 摘要: // 提供一种将自定义逻辑应用于绑定的方式。 public interface IValueConverter { // // 摘要: // 转换值。 // // 参数: // value: // 绑定源生成的值。 // // targetType: // 绑定目标属性的类型。 // // parameter: // 要使用的转换器参数。 // // culture: // 要用在转换器中的区域性。 // // 返回结果: // 转换后的值。如果该方法返回 null,则使用有效的 null 值。 object Convert(object value, Type targetType, object parameter, CultureInfo culture); // // 摘要: // 转换值。 // // 参数: // value: // 绑定目标生成的值。 // // targetType: // 要转换到的类型。 // // parameter: // 要使用的转换器参数。 // // culture: // 要用在转换器中的区域性。 // // 返回结果: // 转换后的值。如果该方法返回 null,则使用有效的 null 值。 object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);
最后我们来看如何使用自定义的数据转换功能,以下是自定义SingnalLight的xaml文件。
<Style TargetType="{x:Type local:SingnalLight}"> <Setter Property="RenderTransform"> <Setter.Value> <TranslateTransform X="{Binding Path=X,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}" Y="{Binding Path=Y,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}"/> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <ControlTemplate.Resources> <local:SingnalLightStatusConverter x:Key="colorconverter"></local:SingnalLightStatusConverter> <local:SingnalLightValueConverter x:Key="valueconverter"></local:SingnalLightValueConverter> </ControlTemplate.Resources> <StackPanel> <TextBlock Text="{Binding Path=ValueA,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}"></TextBlock> <TextBlock Text="100"></TextBlock> <Border x:Name="bd1" Height="{Binding Path=LightHeight,RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}}" SnapsToDevicePixels="True" BorderBrush="Black" BorderThickness="1" Background="Transparent"> <Rectangle Fill="{Binding Path=ValueA, RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}, Converter={StaticResource ResourceKey=colorconverter}}" VerticalAlignment="Bottom"> <Rectangle.Height> <MultiBinding Converter="{StaticResource ResourceKey=valueconverter}"> <Binding Path="ValueA" RelativeSource="{RelativeSource AncestorType={x:Type local:SingnalLight}}"></Binding> <Binding Path="Height" ElementName="bd1"></Binding> </MultiBinding> </Rectangle.Height> </Rectangle> </Border> <TextBlock Text="0"></TextBlock> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style>
很明显可以看出来自定义的数据转换相当与资源的一种。在绑定的时候,增加一个Converter节点即可。
<Rectangle Fill="{Binding Path=ValueA, RelativeSource={RelativeSource AncestorType={x:Type local:SingnalLight}}, Converter={StaticResource ResourceKey=colorconverter}}"
0 0
- WPF系列(二)数据转换
- WPF数据绑定(二)
- 愤怒者系列(二) WPF切换主题
- C#探秘系列(八)WPF数据绑定
- WPF中的binding(十一)- Binding数据的转换
- WPF与MVVM的实现(二)数据绑定
- WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
- WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
- WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
- WPF and Silverlight 学习笔记(二十):WPF数据绑定概述
- 转:WPF and Silverlight 学习笔记(二十):WPF数据绑定概述
- wpf笔记(二)
- WPF应用Binding之数据转换
- 通用excel数据导出/转换(二)
- WPF(二)举例讲解WPF布局
- WPF教程(二) WPF vs WinForms
- WPF( 数据验证)
- WPF自定义样式系列(二)——TextBox输入框样式(部分带水印)
- iOS开发资源
- html JS
- UVA 147- Dollars
- 杭电oj 2043 密码
- 详解php中switch你可能不知道的事
- WPF系列(二)数据转换
- Cpufreq framework 分析-2
- 第一次上级实验-2
- usb延长器比较
- sysstat命令--sar工具
- UVA 357- Let Me Count The Ways
- css各种手型集合(css禁止手型)
- ConcurrentModificationException
- 序列化和反序列化