WPF:如何通过TextBlock文本值设置TextBlock的Foreground属性?

时间:2010-11-04 18:16:59

标签: wpf foreground

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

3 个答案:

答案 0 :(得分:4)

如果您希望灵活地执行某些操作,例如将文本动态映射到颜色等,则可以使用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语句。

答案 1 :(得分:2)

你有一个模型视图(实现INotifyPropertyChanged),它将Text作为属性,前景色作为属性,让textblock将这两个属性绑定到模型视图。 color属性可以取决于text属性。

答案 2 :(得分: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;
    }
}