【wpf】转换器 Converter
WPF 转换器 Converter
2023-09-11 14:14:50 时间
今天积攒了一个转换器的用法,分享给各位。
我们经常会有这种需求: 某些控件有时需要显示,有时需要隐藏,比如:
那,我就想通过一个bool变量和是否显示绑定。
但是我们知道,是否显示,这个属性 Visibility 它并不是一个bool类型无法直接绑定,此时我们需要一个转换器!
接下来,这个转换器可以讲bool类型转换为字符串类型,十分通用,我们就已Visibility举个例子:
<UserControl.Resources>
<wpfcv:Bool2StringConverter x:Key="b2s"/>
</UserControl.Resources>
------------------------------------------------------------------
Visibility="{Binding CanShowCross,
Converter={StaticResource b2s},
ConverterParameter=Visible:Hidden}"
这里我们使用了 Bool2StringConverter 这个转换器,使用这个转换器是,还给转换器传了一个参数,可以将其看成一个字符串 " Visible:Hidden "
记下来我们看看 Bool2StringConverter 是如何定义的。
后台代码
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace WpfConverter
{
public class Bool2StringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (parameter == null) return DependencyProperty.UnsetValue;
if (value == null) return DependencyProperty.UnsetValue;
//将参数字符分段 parray[0]为比较值,parray[1]为true返回值,parray[2]为false返回值
string[] parray = parameter.ToString().ToLower().Split(':');
if (value is bool && parray.Length >=2)
{
//value为bool,true返回parray[1],false返回parray[2]
return (bool)value? parray[0] : parray[1];
}
else
{
return DependencyProperty.UnsetValue;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
//throw new NotImplementedException();
return DependencyProperty.UnsetValue;
}
}
}
在后台中,我们根据绑定的bool值,来判断返回,字符串 Visible:Hidden 的哪个部分,如果是true
就返回Visible, 否则返回Hidden。是不是很巧妙。
这样我就可以通过这么一句话:
Visibility="{Binding CanShowCross,
Converter={StaticResource b2s},
ConverterParameter=Visible:Hidden}"
来实现某个控件的显示与否了!
相关文章
- WPF入门教程系列十九——ListView示例(一)
- 【wpf】Command Binding 命令绑定的使用
- [WPF] 实现两个任天堂 Switch 的加载动画
- [WPF] 在单元测试中使用 Prism 的 EventAggregator,订阅到 ThreadOption.UIThread 会报错
- [WPF 自定义控件]自定义一个“传统”的 Validation.ErrorTemplate
- [WPF 自定义控件]给WPF一个HyperlinkButton
- [WPF 自定义控件]使用WindowChrome自定义RibbonWindow
- WPF教程(十)使用App.xaml
- 【WPF】BusyIndicator做Loading遮罩层
- 【WPF】查找父/子控件(元素、节点)