以下 xaml 在 a 中工作正常Window
:
<Border Width="45" Height="55" CornerRadius="10" >
<Border.Background>
<ImageBrush>
<ImageBrush.ImageSource>
<CroppedBitmap Source="profile.jpg" SourceRect="0 0 45 55"/>
</ImageBrush.ImageSource>
</ImageBrush>
</Border.Background>
</Border>
但是当我在 a 中使用等效代码时DataTemplate
我在运行时收到以下错误:
对象初始化失败
(ISupportInitialize.EndInit)。 '来源'
属性未设置。对象错误
'系统.Windows.Media.Imaging.CroppedBitmap'
在标记文件中。
内部异常:
{“未设置‘源’属性。”}
唯一的区别是我有CroppedBitmap
的 Source 属性数据绑定:
<CroppedBitmap Source="{Binding Photo}" SourceRect="0 0 45 55"/>
是什么赋予了?
UPDATE:根据一个Bea Stollnitz 的旧帖子这是源属性的限制CroppedBitmap
,因为它实现了ISupportInitialize
。 (此信息位于页面下方 - 搜索“11:29”,您就会看到)。
.Net 3.5 SP1 仍然存在这个问题吗?
当 XAML 解析器创建 CroppedBitmap 时,它执行的操作相当于:
var c = new CroppedBitmap();
c.BeginInit();
c.Source = ... OR c.SetBinding(...
c.SourceRect = ...
c.EndInit();
EndInit()
需要Source
为非空。
当你说c.Source=...
,该值始终在 EndInit() 之前设置,但如果您使用c.SetBinding(...)
,它尝试立即进行绑定,但检测到DataContext
尚未设置。因此它将绑定推迟到稍后。因此当EndInit()
叫做,Source
仍然为空。
这解释了为什么在这种情况下需要转换器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)