????????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);}}
}