1

为什么这不起作用?

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

即,BackgroundofListBoxItem被选中时不会改变。

我希望在不必覆盖默认项目模板的情况下实现这种简单的行为。当然,这里有一个简单的解决方案,我只是没有看到。

更新

我发现在 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>
...
4

1 回答 1

1

尝试添加ListBox.Resources并删除IsSelected触发器:

<ListBox.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
</ListBox.Resources>

根据您的系统主题,系统中具有默认的高亮画笔。要更改此值,必须转到SystemColors

引用自MSDN

SystemColors 类提供对系统画笔和颜色的访问,例如 ControlBrush、ControlBrushKey 和 DesktopBrush。系统画笔是使用指定系统颜色绘制区域的 SolidColorBrush 对象。系统刷始终会产生实心填充;它不能用于创建渐变。

您可以将系统画笔用作静态或动态资源。如果您希望在用户在应用程序运行时更改系统画笔时自动更新画笔,请使用动态资源;否则,请使用静态资源。

.NET 4.5系统中不使用SystemColors,因此,您应该:

于 2013-08-31T17:37:00.630 回答