How do I convert a Color to a Brush in XAML? How do I convert a Color to a Brush in XAML? wpf wpf

How do I convert a Color to a Brush in XAML?


I know I am really late to the party, but you don't need a converter for this.

You could do

<Rectangle>    <Rectangle.Fill>        <SolidColorBrush Color="{Binding YourColorProperty}" />    </Rectangle.Fill></Rectangle>


It seems that you have to create your own converter. Here a simple example to start:

public class ColorToSolidColorBrushValueConverter : IValueConverter {    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {        if (null == value) {            return null;        }        // For a more sophisticated converter, check also the targetType and react accordingly..        if (value is Color) {            Color color = (Color)value;            return new SolidColorBrush(color);        }        // You can support here more source types if you wish        // For the example I throw an exception        Type type = value.GetType();        throw new InvalidOperationException("Unsupported type ["+type.Name+"]");                }    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {        // If necessary, here you can convert back. Check if which brush it is (if its one),        // get its Color-value and return it.        throw new NotImplementedException();    }}

To use it, declare it in the resource-section.

<local:ColorToSolidColorBrushValueConverter  x:Key="ColorToSolidColorBrush_ValueConverter"/>

And the use it in the binding as a static resource:

Fill="{Binding Path=xyz,Converter={StaticResource ColorToSolidColorBrush_ValueConverter}}"

I have not tested it. Make a comment if its not working.


A Converter is not needed here. You can define a Brush in XAML and use it. It would be better to define the Brush as a Resource so it can be used other places required.

XAML is as below:

<Window.Resources>    <SolidColorBrush Color="{Binding ColorProperty}" x:Key="ColorBrush" /></Window.Resources><Rectangle Width="200" Height="200" Fill="{StaticResource ColorBrush}" />