使用IValueConverter为Border的BackgroundColor属性赋值失败问题
解决IValueConverter设置Border背景色失效的问题
问题根因
Border的BackgroundColor属性要的是Color类型对象,不是字符串。你之前返回"Orange""Pink"这类颜色名称字符串,绑定系统没法自动把字符串转成Color,所以背景色设置失败。
修正代码
改转换器的Convert方法,直接返回对应Color实例就行,示例如下:
public class NumberToColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is int num) { return num switch { 0 => Colors.Orange, 1 => Colors.Pink, 2 => Colors.Blue, 3 => Colors.Green, 4 => Colors.Yellow, 5 => Colors.Red, _ => Colors.Transparent // 兜底的默认颜色 }; } return Colors.Transparent; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { // 不需要反向转换的话,返回Binding.DoNothing就行 return Binding.DoNothing; } }
补充技巧
如果必须用颜色名称字符串(比如从配置文件读),可以用ColorConverter把字符串转成Color:
return ColorConverter.ConvertFromString("Orange") as Color? ?? Colors.Transparent;
内容的提问来源于stack exchange,提问作者Rob5961
相关产品推荐
相关产品推荐

