WPF .NET 4.5中SolidColorBrush转Brush绑定错误求助
嗨,我来帮你搞定这个奇怪的绑定错误!先把问题捋清楚:你在用SevenSegmentControl时,把NumberColor(SolidColorBrush类型)绑定到Path的Fill属性(Brush类型),编译器提示无法转换,虽然不影响运行,但这个报错确实闹心。
先唠下原理:SolidColorBrush本身就是Brush的子类,理论上完全可以直接赋值给Brush类型属性,出现这个错误大概率是XAML类型检查逻辑或者属性声明的小问题。给你几个实用的解决办法:
最推荐:把源属性改成Brush类型
既然目标属性是Brush,直接把NumberColor的类型改成Brush反而更灵活——既能兼容SolidColorBrush,以后要换渐变刷、纹理刷也不用改属性。修改你的依赖属性声明:public static readonly DependencyProperty NumberColorProperty = DependencyProperty.Register("NumberColor", typeof(Brush), typeof(SevenSegmentControl), new PropertyMetadata(Brushes.Black)); public Brush NumberColor { get { return (Brush)GetValue(NumberColorProperty); } set { SetValue(NumberColorProperty, value); } }这么一改,绑定的类型匹配问题直接消失,编译器也不会再报错。
不想改类型?检查依赖属性声明
确认你的NumberColor依赖属性声明完全正确,比如有没有写错类型、元数据默认值是不是SolidColorBrush类型(比如Brushes.Black就是标准的SolidColorBrush,没问题)。有时候默认值类型不匹配,也会触发这种奇怪的类型检查错误。万不得已用转换器(其实没必要)
如果上面的方法都没解决,可以写个极简的转换器“明确”类型转换关系:public class SolidColorBrushToBrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value as Brush; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value as SolidColorBrush; } }然后在XAML里引用并使用:
<UserControl.Resources> <local:SolidColorBrushToBrushConverter x:Key="BrushConverter"/> </UserControl.Resources> <Path Fill="{Binding NumberColor, Converter={StaticResource BrushConverter}}" Name="top"/>其实这个转换器没做实质转换,只是帮编译器消除类型匹配的疑虑而已。
最后再检查下XAML里的绑定路径有没有拼写错误,比如NumberColor的大小写是不是和后台属性一致,有时候这种低级错误也会导致奇怪的绑定提示哦!
备注:内容来源于stack exchange,提问作者kerwin xu

