可以通过 TextBlock 文本值设置 TextBlock 的前景属性吗?例如:文本值为Mike,前景属性为Black,值为Tim,属性值为green等。我用google搜索,但没有找到任何解决方案。
问问题
6737 次
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 回答