WPF:当绑定值为null时,在DataTrigger中设置Canvas颜色

时间:2011-03-16 15:21:28

标签: wpf binding

我将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;}

2 个答案:

答案 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的相同数据触发器来设置绑定