是否可以通过TextBlock文本值设置TextBlock的前景属性?例如:文本值是Mike,前景属性是黑色,值是Tim,属性值是绿色,等等。我用google搜索,但我找不到任何解决方案。
发布于 2010-11-05 02:24:30
如果您希望灵活地执行某些智能操作,例如将文本动态映射到颜色等,则可以使用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-05 02:20:16
您有一个模型视图(实现INotifyPropertyChanged),它将文本作为属性,并将前景颜色作为属性,让文本块将这两个属性绑定到模型视图。color属性可以依赖于text属性。
发布于 2020-01-07 12:15:45
根据投票评论的数量,我修改了@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;
}
}https://stackoverflow.com/questions/4099837
复制相似问题