Привязка System.Windows.Media.Color к TextBlock.Foreground? - PullRequest
3 голосов
/ 24 марта 2011

Когда я делаю это, я получаю:

"Невозможно создать конвертер по умолчанию для выполнения односторонних преобразований между типами System.Windows.Media.Color и System.Windows.Media..Brush '. Подумайте об использовании свойства Converter Binding. "

Кто-нибудь знает, как это сделать?

Почему WPF не может преобразовать это автоматически, поскольку я использую цвета WPF, а неSystem.Drawing.Color.

РЕДАКТИРОВАТЬ:

Xaml код:

<GridViewColumn Width="120" Header="Info">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock HorizontalAlignment="Center" Text="{Binding Info, Mode=OneWay}" Foreground="{Binding MessageColor, Mode=OneWay}"/>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

1 Ответ

7 голосов
/ 24 марта 2011

TypeConverter по умолчанию для типа Brush, не поддерживает Color (даже версию WPF).Он поддерживает только преобразование в / из строк.

Вам потребуется создать собственный IValueConverter, который принимает Color и возвращает SolidColorBrush.

public class ColorToBrushConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if (!(value is Color))
            throw new InvalidOperationException("Value must be a Color");
        return new SolidColorBrush((Color)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        throw new NotImplementedException();
    }

}
...