WPF 解决 Style.Trigger 中数据绑定失效的问题

参考:stackoverflow

问题背景

有如下代码,发现在 ImageSource="{Binding SomeImage}" 中没有绑定的当前的 DataContext

xaml 复制代码
<Grid>
    <Border>
        <Border.Style>
            <Style TargetType="Border">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SomeValue, ElementName=myControl, Mode=OneWay}" Value="0">
                        <Setter Property="Background">
                            <Setter.Value>
                                <!-- 此处 Binding 没有生效 -->
                                <ImageBrush ImageSource="{Binding SomeImage}" />
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
    </Border>
</Grid>

解决办法

改成如下即可

xaml 复制代码
<Grid>
    <Grid.Resource>
        <ImageBrush x:key="myImage" ImageSource="{Binding SomeImage}" />
        <Style x:key="myStyle" TargetType="Border">
            <Style.Triggers>
                <DataTrigger Binding="{Binding SomeValue, ElementName=myControl, Mode=OneWay}" Value="0">
                    <Setter Property="Background" Value="{StaticResource myImage}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Grid.Resource>
    <Border Style="{StaticResource myStyle}"/>
</Grid>
相关推荐
国服第二切图仔41 分钟前
鸿蒙应用开发之实现键值型数据库跨设备数据同步
数据库·wpf·harmonyos
玖笙&10 小时前
✨WPF编程进阶【7.1】动画基础
c++·c#·wpf·visual studio
专注VB编程开发20年10 小时前
探讨vs2022在net6框架wpf界面下使用winform控件
framework·.net·wpf·winform·cefsharp·miniblink·geckofx45
刘一说11 小时前
Spring Boot 中的定时任务:从基础调度到高可用实践
spring boot·后端·wpf
FuckPatience17 小时前
WPF 获取鼠标相对于控件的坐标信息,控制控件锚点放缩
wpf
兰雪簪轩1 天前
仓颉Actor模型:分布式并发编程的优雅之道
分布式·wpf
Crazy Struggle1 天前
WPF 如何支撑一个灵活的流程图编辑器?
.net·wpf·流程图
西岭千秋雪_3 天前
Zookeeper实现分布式锁
java·分布式·后端·zookeeper·wpf
beyond谚语3 天前
第三章 布局
wpf
Aevget3 天前
界面控件DevExpress WPF v25.1新版亮点:数据管理功能全新升级
.net·wpf·界面控件·devexpress·ui开发