我已经很难理解这个错误一段时间了,现在它终于打破了一些东西。这是我正在做的一个愚蠢的草图:
我的datawrapper类:
class DummyWrapper<T> : INotifyPropertyChanged
{
public DummyWrapper() { }
private T _data;
public T Data
{
get { return _data; }
set
{
_data = value;
Notify("Data");
}
}
public static implicit operator T(DummyWrapper<T> d)
{
return d._data;
}
...
}
我的XAML:
<DockPanel>
<ContentPresenter Name="cp" Visibility="Collapsed"/>
<Rectangle Name="foo" Fill="{Binding ElementName=cp, Path=Content}" Height="50" Width="50"/>
</DockPanel>
我的代码隐藏的相关部分:
DummyWrapper<Brush> dw = new DummyWrapper<Brush>(new SolidColorBrush((Color)ColorConverter.ConvertFromString("Red")));
cp.Content = dw;
当然如果这一切都按照我预期的方式工作,我就不会在这里。输出窗口显示了这个:
System.Windows.Data Error: 23 : Cannot convert 'WpfTestApplication.DummyWrapper`1[System.Windows.Media.Brush]'
from type 'DummyWrapper`1' to type 'System.Windows.Media.Brush'
for 'en-US' culture with default conversions; consider using Converter property of Binding.
......它在那段时间里继续发展。
在这种情况下,我能做些什么来允许我的DummyWrapper
自动转换(即没有在绑定中提供转换器)?
答案 0 :(得分:1)
将您的代码行更改为
var solidColorBrush = new SolidColorBrush((Color) ColorConverter.ConvertFromString("Red"));
DummyWrapper<Brush> dw = new DummyWrapper<Brush>(solidColorBrush);
cp.Content = (Brush)dw;
您不希望使用converters
那么好。 Content
是一个对象,除非Content
的类型为Brush
,否则执行隐式运算符不会这样做。您必须明确地将其强制转换为Brush
System.Object
是Content属性的类型。 通过继承,已经有一个隐含的转换为基础 型