是否可以通过TextBlock文本值设置TextBlock的前台属性?例如:文本值是Mike,前景属性是Black,值是Tim,属性值是green,依此类推。我用google搜索,但找不到任何解决方案。
如果您希望灵活地执行一些聪明的事情,例如将文本动态映射为颜色等,则可以使用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语句,您可以拥有更智能的逻辑来处理新值等。
您有一个模型视图(实现 INotifyPropertyChanged),其中 Text 作为属性,前景色作为属性,让文本块将这两个属性绑定到模型视图。颜色属性可以取决于文本属性。