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

Joe*_*Joe 2 wpf foreground

是否可以通过TextBlock文本值设置TextBlock的前台属性?例如:文本值是Mike,前景属性是Black,值是Tim,属性值是green,依此类推。我用google搜索,但找不到任何解决方案。

Dan*_*oiu 5

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

<TextBlock Text="{Binding Path=Foo}" 
           Foreground="{Binding Path=Foo, Converter={StaticResource myConverter}" />
Run Code Online (Sandbox Code Playgroud)

您的转换器将被定义如下:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,代替简单的switch语句,您可以拥有更智能的逻辑来处理新值等。

  • 要添加:如果您不使用静态资源,则转换器中的返回值应为:`new SolidColorBrush(Colors.Red)`以正确绑定字段值。 (3认同)

Ale*_* Lo 3

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