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.ImageSourcehelper: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/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系