WPF:当绑定(bind)值为空时在 DataTrigger 中设置 Canvas 颜色

标签 wpf binding

我将 Canvas 的 Background 属性绑定(bind)到某个 SelectedColorItem 对象,如下所示:

<Canvas>
    <Canvas.Style>
        <Style TargetType="Canvas">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=SelectedColorItem,Mode=OneWay,Converter={StaticResource isNullConverter}}"
                                             Value="True">
                     <Setter Property="Background" Value="Red" />
                 </DataTrigger>
            </Style.Triggers>
        </Style>
    </Canvas.Style>
    <Canvas.Background>
        <SolidColorBrush Color="{Binding SelectedColorItem.MediaColor}" />
    </Canvas.Background>
</Canvas>

有效 - 它显示所选的颜色。 我写的 DataTrigger 不起作用,它指示 SelectedColorItem 为空。

最简单的 isNullValueConverter 也可以工作 - 它可以用标签进行验证:

<Label Content="{Binding Path=SelectedColorItem,Mode=OneWay,Converter={StaticResource isNullConverter}}" />

当 SelectedColorItem 为 null 时显示 True,否则显示 False

谁能告诉我触发器出了什么问题?

附言 SelectedColorItem 是 ColorItemClass 的一个实例,它包含一个 MediaColor 属性:

public System.Windows.Media.Color MediaColor {get;set;}

最佳答案

问题在于,当值来自样式时,在元素上设置的值本身具有更高的“优先级”,这意味着在样式内设置的值(包括触发器)不能覆盖本地设置的值。

设置后,您需要将两个值都放在同一级别,因此只需将 Background 属性绑定(bind)移动到样式中即可:

<Canvas>
    <Canvas.Style>
        <Style TargetType="Canvas">
            <Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="{Binding SelectedColorItem.MediaColor}" />
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=SelectedColorItem,Mode=OneWay,Converter={StaticResource isNullConverter}}"
                                             Value="True">
                     <Setter Property="Background" Value="Red" />
                 </DataTrigger>
            </Style.Triggers>
        </Style>
    </Canvas.Style>
</Canvas>

关于WPF:当绑定(bind)值为空时在 DataTrigger 中设置 Canvas 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327483/

相关文章:

c# - 如何将字符串的 observableCollection 绑定(bind)到列表框

c# - .NET 应用程序无法启动并收到 XamlParseException

java - Guice - 默认绑定(bind)定义

wpf - 使用 MVVM 将 View 动态绑定(bind)到 ContainerControl

javascript - 更新 knockout 可观察数组无法更新剑道多选控件

wpf - MVVM 消息传递或事件或其他选项?

c# - 在 MVVM 中绑定(bind)事件并将事件参数作为命令参数传递

c# - 将逐个元素添加到 ListView 而不阻塞 UI

wpf - 绑定(bind)到 DataContext 中的项目数

wpf - 将 ViewModel 的属性绑定(bind)到 CurrentCell