#1,138 – Value Converter Example for Output
August 16, 2014 1 Comment
The Convert method of a value converter is used to convert from a binding source (e.g. a property) to a binding target (e.g. the attribute of a control). Below is a simple example, showing how we can convert from an integer to a brush of a particular color.
In XAML, we have a Slider that ranges from 0-255 and binds to a property, storing the integer value that the user selects. We then bind to the same property for a rectangle shape’s Fill property. The Fill property wants a Brush object, so we use a value converter to convert from the integer to a brush.
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:WpfApplication1" Title="Value Converter" SizeToContent="WidthAndHeight"> <Window.Resources> <local:IntToBlueBrushValueConverter x:Key="intToBlueBrushValueConverter"/> </Window.Resources> <StackPanel Margin="15"> <Slider Minimum="0" Maximum="255" Value="{Binding BlueValue}"/> <Label Content="{Binding BlueValue}"/> <Rectangle Height="80" Width="80" Fill="{Binding Path=BlueValue, Converter={StaticResource intToBlueBrushValueConverter}}"/> </StackPanel> </Window>
The code-behind is straightforward.
public partial class MainWindow : Window, INotifyPropertyChanged { public MainWindow() { this.DataContext = this; InitializeComponent(); } public event PropertyChangedEventHandler PropertyChanged = delegate { }; protected virtual void OnPropertyChanged(string prop) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); } private int blueValue; public int BlueValue { get { return blueValue; } set { if (blueValue != value) { blueValue = value; OnPropertyChanged("BlueValue"); } } } }
In the value converter, we create a solid color brush whose R and G values are 0 and whose B value is derived from the integer (slider position).
public class IntToBlueBrushValueConverter : IValueConverter { // Convert from int to System.Windows.Media.Brush // where brush is color with R=0, G=0 and B=int public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int blueVal = (int)value; blueVal = Math.Min(Math.Max(0, blueVal), 255); return new SolidColorBrush(Color.FromRgb(0, 0, (byte)blueVal)); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } }
At run-time, the color of the rectangle changes as we move the slider.