我将 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/