为什么这不起作用?
<ListBox>
<ListBox.Items>
<ListBoxItem>Foo</ListBoxItem>
<ListBoxItem>Bar</ListBoxItem>
<ListBoxItem>Text</ListBoxItem>
</ListBox.Items>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
即,Background
ofListBoxItem
被选中时不会改变。
我希望在不必覆盖默认项目模板的情况下实现这种简单的行为。当然,这里有一个简单的解决方案,我只是没有看到。
更新
我发现在 Windows 7 和 Windows 8 中都可以使用的唯一方法是覆盖默认的ItemContainerStyle
. 这稍微不那么痛苦了,因为我现在可以右键单击 Visual Studio 中的控件并编辑样式 - 编辑副本......但这感觉有点矫枉过正,因为我最终只是更改了我注释掉的 XAML 的一行以下。我只展示了我被迫引入/覆盖的完整模板的一小部分相关部分。
没有更简单的方法吗?
...
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Selector.IsSelectionActive" Value="True"/>
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<!--<Setter Property="Background" TargetName="Bd" Value="#3D26A0DA"/>-->
<!-- Changed above line to the following line... -->
<Setter Property="Background" TargetName="Bd" Value="Red"/>
<Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
</MultiTrigger>
...