WPF有的时候我们会发现一些BUG,看似非常合理,甚至微小到怀疑Visual Studio
出BUG了,然而并不是,电脑通常不会欺骗我们的!
下面举个案例:
ControlTemplate
样式定义部分
<Border x:Name="radioButtonBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
<Grid Margin="2">
<Image Source="{Binding (local:UIHelper.ImageSource),RelativeSource={RelativeSource Mode=TemplatedParent}}" Margin="2"/>
<Border Visibility="{TemplateBinding IsChecked,Converter={StaticResource VisibilityConverter}}" CornerRadius="25" Background="White" Height="25" Width="25" Margin="15" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<Image Source="{StaticResource checked}" Height="20" Width="20"/>
</Border>
</Grid>
</Border>
应用样式部分:
<RadioButton helper:UIHelper.ImageSource="Background/9.jpg" Style="{StaticResource Style.RadioButton.Graphic}"/>
以上代码,是不是可以正常运行呢?是的,能正常编译通过,也能正常跑起来!
但是,图片出不来……!! Why?
因为样式绑定的时候,ControlTemplate
中使用(local:UIHelper.ImageSource)
进行绑定,而在使用过程中,用helper:UIHelper.ImageSource
进行绑定。但是实际上,local:UIHelper.ImageSource
和helper:UIHelper.ImageSource
指向的是同一个类对象。而,xaml在处理过程中,因为绑定的PropertyPath
不一致,而导致绑定失败!
因为,这个错误,看似很符合逻辑,符合语法,但是它并不能正确的绑定成功,因为PropertyPath
不一样。
本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/WPF%E9%99%84%E5%8A%A0%E5%B1%9E%E6%80%A7%E7%BB%91%E5%AE%9A%E6%97%A0%E6%95%88%E7%9A%84%E9%97%AE%E9%A2%98.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。