当前位置:   article > 正文

C#WPF中多个IValueConverter的应用_wpf ivalueconverter

wpf ivalueconverter

今天在写mes的管理小软件时发现,读取数据库的文件并且进行显示的时候需要进行一些转换,并且,在界面缩放的时候也需要进行改变,用margin显示不了。使用了tabcontrol控件,把tabcontrol的控件设置为grid的background四边缩进30的显示。 这就需要进行转换,获取到background的实际大小,再减去60就获得了新的tabcontontrol的显示大小。 界面的参数类型是bool型的,我希望显示在listview中用文字运行中或者未运行来进行显示,也需要转换器。 网上查了一些资料,要么是多值的转换IMultiValueConverter ,要么是一个程序中只使用了一个的IValueConverter。不知道为什么我使用了2个IValueConverter之后会出现错误。 总是说有一个IValueConverter没有定义,或者定义冲突,语句什么的都没错误。 后来我修改了一下做法。 就实现对应的功能了。 

IValueConverter 的编写:

把几个IValueConverter 函数都写入App.xaml.cs文件中。本例程用了2个转换器。在App的class外添加2个转换器类。

  1. public class MachineStateConvertor : IValueConverter
  2. {
  3. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  4. {
  5. if ((bool)value)
  6. return "运行中";
  7. else
  8. return "未运行";
  9. }
  10. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  11. {
  12. if ((string)value == "运行中")
  13. return true;
  14. else
  15. return false;
  16. }
  17. }
  18. public class MinusHundredConverter : IValueConverter
  19. {
  20. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  21. {
  22. return ((double)value) - 60;
  23. }
  24. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  25. {
  26. throw new NotSupportedException("Cannot convert back");
  27. }
  28. }

在所要使用的窗口的xaml中使用。

例程中。使用之前,在<windows>中先包含转换器所在的空间,然后在    <Window.Resources></Window.Resources>之间插入转换器的定义。 之后就可以在<grid>之间使用了。 

例程如下:<MainWindow.xaml>中。

先包含空间:

xmlns:local="clr-namespace:MesManage"

在resources中定义转换器

  1. <!--定义转换器-->
  2. <local:MinusHundredConverter x:Key="LengthCVT"/>

在窗体编程中使用转换器:

  1. <TabControl x:Name="tabControl" TabStripPlacement="Left"
  2. HorizontalAlignment="Left"
  3. Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Border}},
  4. Path=ActualWidth, Converter={StaticResource LengthCVT}, Mode=OneWay}"
  5. Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Border}},
  6. Path=ActualHeight, Converter={StaticResource LengthCVT}, Mode=OneWay}" >

第二个转换器使用在pages文件夹下的PageLineInfo窗口中

包含空间

xmlns:src ="clr-namespace:MesManage"

定义转换器:
 

  1. <!--定义转换器-->
  2. <src:MachineStateConvertor x:Key="MachCVT"/>

使用转换器把bool类型转成字符显示状态:

<GridViewColumn Header="产线状态" DisplayMemberBinding="{Binding Path = isRunning,Converter={StaticResource MachCVT}}" >

这样子就不会出现问了。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/537680
推荐阅读
相关标签
  

闽ICP备14008679号