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

Wpf 如何在样式触发器中同时绑定数据绑定和属性值?,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,我想在某些数据被“忽略”时灰显某些文本,但我不希望在选中该项时灰显。(特别是在高对比度模式下,将颜色设置为灰色值会导致文本无法读取) 这是我第一次尝试这样做 <Style> <!-- .... --> <Setter Property="Control.Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextColor}}" /> <Style.Trigg

我想在某些数据被“忽略”时灰显某些文本,但我不希望在选中该项时灰显。(特别是在高对比度模式下,将颜色设置为灰色值会导致文本无法读取)

这是我第一次尝试这样做

<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>

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


如何解决此问题?

根据您使用样式的确切位置,可以使用相对资源绑定将第一个条件转换为绑定到ListBoxItem.IsSelected属性。

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

对Andrew的答案投了赞成票,我认为您希望使用
RelativeSource
绑定到
ListBoxItem
IsSelected属性,尽管我会这样尝试:

<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="false" />


这对我来说很有效,在
资源字典中使用
样式
,并通过设置
ItemContainerStyle
属性在
列表框中使用它。

对Andrew的答案投了赞成票,我认为您希望绑定到
ListBoxItem
IsSelected
属性,使用
相对资源
,尽管我会这样尝试:

<Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="false" />


资源字典中使用
样式,并通过设置
ItemContainerStyle
属性在
列表框中使用它,这对我起到了作用。

这将应用于
。请在第一个条件中尝试:Binding={Binding Path=IsSelected,RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}}另外-您应该在您的条件中大写'True'和'False'。它在XAML中是标准的,尽管它不是xml的标准。在某些情况下,它会产生不同。这将应用于
。请在第一个条件中尝试此操作:Binding={Binding Path=IsSelected,RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}另外-您应该在您的条件中大写“True”和“False”-它在XAML中是标准的,尽管它不是xml的标准。在某些情况下,它会产生不同。