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