WPF: Как установить свойство Foreground текстового значения TextBlock с помощью TextBlock?

Можно установить свойство переднего плана TextBlock с помощью текстового значения TextBlock? Например: текстовое значение - "Майк", свойство переднего плана - "черный", значение - "Тим", значение свойства - зеленый и т. Д. Я ищу в Google, но не могу найти никакого решения.

2 ответа

Если вам нужна гибкость, чтобы сделать что-то умное, например, динамическое отображение текста на цвета и т. Д., Вы можете использовать класс Converter. Я предполагаю, что текст настроен для привязки к чему-либо, вы можете привязать к тому же чему-либо в Foreground, но с помощью специального конвертера:

<TextBlock Text="{Binding Path=Foo}" 
           Foreground="{Binding Path=Foo, Converter={StaticResource myConverter}" />

Ваш конвертер будет определен примерно так:

public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string text = (string)value;
        switch (text)
        {
            case "Mike":
                return Colors.Red;
            case "John":
                return Colors.Blue;
            default:
                return Colors.Black;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

Очевидно, что вместо простого оператора switch вы могли бы иметь более разумную логику для обработки новых значений и тому подобное.

У вас есть представление модели (реализующее INotifyPropertyChanged), в котором текст является свойством, а цвет переднего плана - свойством, текстовый блок связывает эти два свойства с представлением модели. свойство color может зависеть от свойства text.

Основываясь на количестве проголосовавших комментариев, я пересматриваю ответ от @danut-enachioiu, чтобы реализовать решение с использованием Brushes, вместо того Colors чтобы возвращаемое значение соответствовало типу свойства элемента WPF.

TextBlock.Foreground is 'System.Windows.Media.Brushes'

Вот исправленный код...

public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string text = (string)value;
        switch (text)
        {
            case "Mike":
                return Brushes.Red;
            case "John":
                return Brushes.Blue;
            default:
                return Brushes.Black;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}
Другие вопросы по тегам