Wpf 如何按TextBlock文本值设置TextBlock的前台属性?

Wpf 如何按TextBlock文本值设置TextBlock的前台属性?,wpf,binding,converters,foreground,Wpf,Binding,Converters,Foreground,是否可以按TextBlock文本值设置TextBlock的前台属性? 例如:文本值为Mike,前景属性为黑色,值为Tim,属性值为绿色,等等。我用google搜索,但找不到任何解决方案。您有一个模型视图(实现INotifyPropertyChanged),其中文本为属性,前景颜色为属性,让textblock将这两个特性绑定到模型视图。颜色属性可以依赖于文本属性。如果您希望灵活地执行一些智能操作,例如将文本动态映射到颜色等,可以使用转换器类。我假设文本设置为绑定到某个对象,您可以通过自定义转换器绑

是否可以按TextBlock文本值设置TextBlock的前台属性?
例如:文本值为Mike,前景属性为黑色,值为Tim,属性值为绿色,等等。我用google搜索,但找不到任何解决方案。

您有一个模型视图(实现INotifyPropertyChanged),其中文本为属性,前景颜色为属性,让textblock将这两个特性绑定到模型视图。颜色属性可以依赖于文本属性。

如果您希望灵活地执行一些智能操作,例如将文本动态映射到颜色等,可以使用转换器类。我假设文本设置为绑定到某个对象,您可以通过自定义转换器绑定到前景中的相同对象:

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

显然,您可以使用更智能的逻辑来处理新值等,而不是简单的switch语句。

根据投票评论的数量,我正在修改@danut enachioiu的答案,以使用
笔刷实现解决方案,而不是
颜色
,以便返回的值与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;
    }
}

我想您会发现,使用这种方法比触发器/转换器方法更灵活、更易测试。要添加:如果您不使用静态资源,转换器中的返回值应该是:
new SolidColorBrush(Colors.Red)
以正确绑定字段值。
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;
    }
}