当前位置:   article > 正文

【wpf】转换器 Converter_wpf converter

wpf converter

今天积攒了一个转换器的用法,分享给各位。

我们经常会有这种需求: 某些控件有时需要显示,有时需要隐藏,比如:

那,我就想通过一个bool变量和是否显示绑定。

但是我们知道,是否显示,这个属性 Visibility 它并不是一个bool类型无法直接绑定,此时我们需要一个转换器!

接下来,这个转换器可以讲bool类型转换为字符串类型,十分通用,我们就已Visibility举个例子:

  1. <UserControl.Resources>
  2. <wpfcv:Bool2StringConverter x:Key="b2s"/>
  3. </UserControl.Resources>
  4. ------------------------------------------------------------------
  5. Visibility="{Binding CanShowCross,
  6. Converter={StaticResource b2s},
  7. ConverterParameter=Visible:Hidden}"

 这里我们使用了 Bool2StringConverter  这个转换器,使用这个转换器是,还给转换器传了一个参数,可以将其看成一个字符串 " Visible:Hidden "

记下来我们看看 Bool2StringConverter  是如何定义的。

后台代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. using System.Windows.Data;
  9. namespace WpfConverter
  10. {
  11. public class Bool2StringConverter : IValueConverter
  12. {
  13. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  14. {
  15. if (parameter == null) return DependencyProperty.UnsetValue;
  16. if (value == null) return DependencyProperty.UnsetValue;
  17. //将参数字符分段 parray[0]为比较值,parray[1]为true返回值,parray[2]为false返回值
  18. string[] parray = parameter.ToString().ToLower().Split(':');
  19. if (value is bool && parray.Length >=2)
  20. {
  21. //value为bool,true返回parray[1],false返回parray[2]
  22. return (bool)value? parray[0] : parray[1];
  23. }
  24. else
  25. {
  26. return DependencyProperty.UnsetValue;
  27. }
  28. }
  29. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  30. {
  31. //throw new NotImplementedException();
  32. return DependencyProperty.UnsetValue;
  33. }
  34. }
  35. }

在后台中,我们根据绑定的bool值,来判断返回,字符串 Visible:Hidden 的哪个部分,如果是true

就返回Visible, 否则返回Hidden。是不是很巧妙。

这样我就可以通过这么一句话:

Visibility="{Binding CanShowCross,
Converter={StaticResource b2s},
ConverterParameter=Visible:Hidden}"

来实现某个控件的显示与否了!

--------------2023年10月9日

根据网友weixin_42179035 的提问,我发现确实少了点内容:补充内容如下

  1. private bool canShowCross;
  2. /// <summary>
  3. /// 十字线显示
  4. /// </summary>
  5. public bool CanShowCross
  6. {
  7. get { return canShowCross; }
  8. set { SetProperty(ref canShowCross, value); }
  9. }

这里就是通过,CheekBox的IsCheeked属性和 Line的 Visibility属性,同时绑定了CanShowCross:

这样当点击CheekBox时,CanShowCross就会被改变,此时也就会改变Line的 Visibility属性。

  1. <Line X1="0" Stroke="Pink" Focusable="False" Visibility="{Binding CanShowCross,Converter={StaticResource b2s},ConverterParameter=Visible:Hidden}"
  2. Y1="{Binding ActualHeight, Converter={StaticResource half}, ElementName=hSmart}"
  3. X2="{Binding ActualWidth, ElementName=hSmart}"
  4. Y2="{Binding ActualHeight, Converter={StaticResource half},ElementName=hSmart}" />
  5. <Line X1="{Binding ActualWidth, Converter={StaticResource half},ElementName=hSmart}"
  6. Y1="0" Stroke="Pink" Focusable="False" IsEnabled="False" Visibility="{Binding CanShowCross,Converter={StaticResource b2s},ConverterParameter=Visible:Hidden}"
  7. X2="{Binding ActualWidth, Converter={StaticResource half},ElementName=hSmart}"
  8. Y2="{Binding ElementName=hSmart, Path=ActualHeight}" />
  9. <ToolBar Grid.ColumnSpan="2">
  10. <CheckBox IsChecked="{Binding CanShowCross}" Margin="5,0,0,0">十字线</CheckBox>
  11. </ToolBar>

(补充2)这里又引出了一个half转换器,顾名思义就得到属性值的一半大小:

  1. public class HalfConverter : IValueConverter
  2. {
  3. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  4. {
  5. if (value == null || (double)value == 0) return DependencyProperty.UnsetValue;
  6. return (double)(value) / 2;
  7. }
  8. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  9. {
  10. //throw new NotImplementedException();
  11. return DependencyProperty.UnsetValue;
  12. }
  13. }

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

闽ICP备14008679号