当某些数据被“忽略”时,我希望灰显一些文本,但我不希望在选择项目时发生灰色。 (具体来说,在高对比度模式下,将颜色设置为灰色值会导致文本无法读取)
这是我第一次尝试这样做。
<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。 (至少,我认为这就是它失败的原因。)
我该如何解决这个问题?
答案 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
中使用它。