WPF: Как установить свойство Foreground текстового значения TextBlock с помощью TextBlock? - PullRequest
1 голос
/ 04 ноября 2010

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

Ответы [ 2 ]

4 голосов
/ 04 ноября 2010

Если вы хотите гибко делать что-то умное, например, динамически отображать текст в цвета и т. Д., Вы можете использовать класс 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 вы могли бы иметь более разумную логику для обработки новых значений и тому подобное.

2 голосов
/ 04 ноября 2010

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

...