我有一个显示复选框列表的列表框,我想根据列表框中的项目是否被选中来更改复选框的前景(而不是选中该复选框)。如果ItemTemplate是一个简单的TextBlock,则控件的行为很好,但是如果ItemTemplate是复选框,则前景不会改变。
有人可以向我解释为什么它对复选框不起作用吗?
使用TextBox:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Foreground" Value="Black" />
<Style.Triggers>
<Trigger Property="ListBoxItem.IsSelected" Value="True">
<Trigger.Setters>
<Setter Property="Foreground" Value="White" />
</Trigger.Setters>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=TextToDisplay}" />
</DataTemplate>
</ListBox.ItemTemplate>
使用CheckBox:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Foreground" Value="Black" />
<Style.Triggers>
<Trigger Property="ListBoxItem.IsSelected" Value="True">
<Trigger.Setters>
<Setter Property="Foreground" Value="White" />
</Trigger.Setters>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Path=TextToDisplay}" />
</DataTemplate>
</ListBox.ItemTemplate>
答案 0 :(得分:0)
您可以使用Foreground
绑定
<CheckBox
Content="{Binding Path=TextToDisplay}"
Foreground="{Binding Path=Foreground,
RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"
/>