我将Canvas的Background属性绑定到某个 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进行修改:
<Label Content="{Binding Path=SelectedColorItem,Mode=OneWay,Converter={StaticResource isNullConverter}}" />
如果SelectedColorItem为null,则显示 True ,否则显示 False 。
有人可以告诉我触发器有什么问题吗?
P.S。 SelectedColorItem是ColorItemClass的一个实例,它包含一个MediaColor属性:
public System.Windows.Media.Color MediaColor {get;set;}
答案 0 :(得分:5)
问题是,当样式中的值设置时,元素本身设置的值具有更高的“优先级”,这意味着在样式中设置的值(包括触发器)不能覆盖本地设置的值。
设置完成后,您需要将两个值放在同一级别上,因此只需在样式中移动Background
属性绑定:
<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>
答案 1 :(得分:2)
您明确设置了Background属性。现在,实现您想要的最简单方法是将绑定回退值设置为红色。像:
<Canvas>
<Canvas.Background>
<SolidColorBrush Color="{Binding SelectedColorItem.MediaColor, FallbackValue=Red}" />
</Canvas.Background>
</Canvas>
或者您也可以使用值为false的相同数据触发器来设置绑定