网站备案拍照是什么,搜索引擎优化是指什么意思,中国建设质量网官方网站,手把手做网站在WPF程序的数据绑定里面#xff0c;经常会通过一个布尔类型的值来控制UI控件的状态#xff0c;例如是否可见#xff0c;是否最大化之类的。然而UI控件的各个状态属性的类型往往不是布尔类型#xff0c;比如UIElement.Visibility的类型是Visibility枚举#xff0c;Window.… 在WPF程序的数据绑定里面经常会通过一个布尔类型的值来控制UI控件的状态例如是否可见是否最大化之类的。然而UI控件的各个状态属性的类型往往不是布尔类型比如UIElement.Visibility的类型是Visibility枚举Window.WindowState的类型是WindowState枚举。以前我为了将布尔类型的数据绑定到这些可依赖属性的时候经常要写很多ValueConverter例如BoolToVisibilityConverter啦BoolToWindowStateConverter啦很麻烦。介绍一个通用的BoolToXXX转换类这个类使用Binding对象的ConverterParameter和FallbackValue来实现布尔类型与任意值转换的功能。ConverterParameter是数据绑定的时候UI传到ValueConverter的参数比如要将一个字符串通过数据绑定转换成整数可以通过ConverterParameter来指定按照十进制还是十六进制转换。而FallbackValue的作用是当数据绑定不能提供一个有意义的数值的时候通过返回DependencyProperty.UnsetValue这个值数据绑定引擎就会使用FallbackValue里面指定的值。先看看BoolToValueConverter的源代码 public class BoolToValueConverter : IValueConverter{#region IValueConverter Memberspublic object Convert(object value, Type targetType, object parameter, CultureInfo culture){if ((bool)value)return parameter;elsereturn DependencyProperty.UnsetValue;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return object.Equals(value, parameter);}#endregion}
上面的Convert函数通过判断绑定的布尔值如果为真True则使用Binding对象的ConverterParameter属性保存的值如果为假False那么返回DependencyProperty.UnsetValue这样就告诉数据绑定引擎使用Binding对象的FallbackValue。而ConvertBack的作用就是为了判断 UI对象对应属性的值例如UIElement.Visibility是不是和预设的值例如Visibility.Visible相同而返回相应的值。你也可以通过下面的代码来获知BoolToValueConverter的用法—请注意黄色加亮的部分BoolToValueTestWindow.xaml:Window x:ClassManualTestProject.WpfLibTest.BoolToValueTestWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:converterclr-namespace:WpfLib.Converters;assemblyWpfLibTitleBoolToValueTestWindow Height300 Width300 x:NameLayoutRootWindow.Resourcesconverter:BoolToValueConverter x:KeyBoolToValueConverter //Window.ResourcesStackPanelCheckBox IsChecked{Binding ElementNameLayoutRoot, PathBoolValue}ContentCheck box /Button ContentTrueVisibility{Binding ElementNameLayoutRoot, PathBoolValue, Converter{StaticResource BoolToValueConverter}, ConverterParameterVisible, FallbackValueCollapsed}x:NameTrueButton ClickTrueButton_Click/Button ContentFalseVisibility{Binding ElementNameLayoutRoot, PathBoolValue, Converter{StaticResource BoolToValueConverter}, ConverterParameterCollapsed, FallbackValueVisible}x:NameFalseButton ClickFalseButton_Click//StackPanel/WindowBoolToValueTestWindow.xaml.cs:public partial class BoolToValueTestWindow : Window{public bool BoolValue{get { return (bool)GetValue(BoolValueProperty); }set { SetValue(BoolValueProperty, value); }}public static readonly DependencyProperty BoolValueProperty DependencyProperty.Register(BoolValue,typeof(bool),typeof(BoolToValueTestWindow),new UIPropertyMetadata(false));public BoolToValueTestWindow(){InitializeComponent();}private void TrueButton_Click(object sender, RoutedEventArgs e){BoolValue false;}private void FalseButton_Click(object sender, RoutedEventArgs e){BoolValue true;}}