4

可以通过 TextBlock 文本值设置 TextBlock 的前景属性吗?例如:文本值为Mike,前景属性为Black,值为Tim,属性值为green等。我用google搜索,但没有找到任何解决方案。

4

3 回答 3

6

如果您希望灵活地做一些智能的事情,例如将文本动态映射到颜色等,您可以使用 Converter 类。我假设文本设置为绑定到某些东西,您可以在前台绑定到相同的东西,但通过自定义转换器:

<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 语句。

于 2010-11-04T18:24:29.903 回答
3

您有一个模型视图(实现 INotifyPropertyChanged),它具有 Text 作为属性和前景色作为属性,让文本块将这两个属性绑定到模型视图。color 属性可以依赖于 text 属性。

于 2010-11-04T18:20:15.660 回答
1

根据投票评论的数量,我正在修改@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;
    }
}
于 2020-01-07T04:15:44.770 回答