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