如何在样式触发器中绑定数据绑定和属性值?

时间:2013-09-09 21:19:23

标签: wpf xaml data-binding

当某些数据被“忽略”时,我希望灰显一些文本,但我不希望在选择项目时发生灰色。 (具体来说,在高对比度模式下,将颜色设置为灰色值会导致文本无法读取)

这是我第一次尝试这样做。

<Style>
<!-- .... -->
<Setter Property="Control.Foreground"
        Value="{DynamicResource {x:Static SystemColors.ControlTextColor}}" />
<Style.Triggers>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <!-- Set gray text when not selected, and ignored. -->
            <Condition Property="ListBoxItem.IsSelected" Value="false" />
            <Condition Binding="{Binding Ignored}" Value="true" />
        </MultiDataTrigger.Conditions>
        <Setter Property="Control.Foreground"
                Value="{DynamicResource {x:Static SystemColors.GrayTextColor}}" />
    </MultiDataTrigger>
</Style.Triggers>
</Style>

这在运行时失败,因为MultiDataTrigger需要在其条件上设置Binding。 (至少,我认为这就是它失败的原因。)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

根据您使用Style的确切位置,您可以使用RelativeSource绑定将第一个Condition转换为ListBoxItem.IsSelected属性。

答案 1 :(得分:2)

Upvoted Andrew的回答,我想你想使用IsSelected绑定到ListBoxItem的{​​{1}}属性,虽然我会这样尝试:

RelativeSource

这对我有用,使用<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="false" /> 中的Style,并通过设置ResourceDictionary属性在ListBox中使用它。