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的标准。在某些情况下,它会产生不同。