5.2.3 WPF 中 XAML 文件 Converter 使用介绍
Converter(转换器)在 WPF 数据绑定中扮演着重要角色,用于在源数据和目标属性之间进行值转换
举例来说:我想用一个bool量来控制一个背景,为true时,显示红色;为false时背景用默认颜色。因此 Background="{Binding 某bool量}",这个bool量不是颜色值,怎么转换成颜色值?就需要一个继承自IValueConverter的转换器。见例子所示:
例一:bool量转换成颜色。
注意需要先在window.Resources中把这个类引用过来。
因为我这个转换类的命名空间就是这个定义的local中,可以直接写
<local:BooleanToColorConverter x:Key="BooleanToColorConverter"/>
如果命名空间不一致,则见例子2。
最终效果如下:
<Window.Resources><local:BooleanToColorConverter x:Key="BooleanToColorConverter"/>
</Window.Resources>
<Grid><StackPanel ><Border Height="50" Width="100" Background="{Binding BSetRed,Converter={StaticResource BooleanToColorConverter}, ConverterParameter=Red}"/><Button Content="反转颜色" Click="Button_Click" /></StackPanel></Grid>
public class BooleanToColorConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if((bool)value){return parameter;}else{return DependencyProperty.UnsetValue;}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return (value == parameter);}
}
public partial class Window1 : Window,INotifyPropertyChanged{bool bSetRed = false;public event PropertyChangedEventHandler PropertyChanged;public bool BSetRed { get => bSetRed;set { bSetRed = value;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("BSetRed"));} }public Window1(){InitializeComponent();DataContext = this;}private void Button_Click(object sender, RoutedEventArgs e){BSetRed = !bSetRed;}}
例2:bool量转换成颜色。转换类放到其他命名空间下,比如Common.
此时因local下找不到这个类,所以报警。
此时:追加一个common的命名空间。然后程序可以正常运行。
namespace AhuiPLC_CurveRecord.Common
{public class BooleanToColorConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if((bool)value){return parameter;}else{return DependencyProperty.UnsetValue;}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return (value == parameter);}}
}