如何通过TextBlock文本值设置TextBlock的前景属性?

5

是否可以根据TextBlock文本值设置前景属性? 例如:文本值为Mike,前景属性为黑色,值为Tim,属性值为绿色等。我使用Google搜索,但没有找到任何解决方法。

3个回答

7
如果您想要灵活地进行一些智能操作,例如将文本动态映射到颜色等,您可以使用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语句,你可以有更智能的逻辑来处理新值等情况。

8
如若您没有使用静态资源,那么转换器中的返回值应该是:new SolidColorBrush(Colors.Red),以便正确地绑定字段值。 - Fragment

3
你有一个实现了INotifyPropertyChanged接口的模型视图,其中Text属性和前景色属性,将文本块(TextBlock)绑定这两个属性到模型视图上。颜色属性可以依赖于文本属性。

1
我认为你会发现使用这种方法比触发器/转换器方法更灵活、可测试。 - Alex Lo

2

根据投票评论的数量,我正在修改 @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;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接