列表框样式不起作用

时间:2018-07-18 13:02:39

标签: wpf xaml

ListBox失去焦点时,我试图使ListBox中所选项目的突出显示颜色保持不变。经过数小时的搜索,尝试了不同的解决方案之后,我什么都无法工作。请帮助我了解为什么我现在尝试的解决方案似乎没有任何改变。

这是在Window的xaml顶部定义的:

<Window.Resources>
    <Style x:Key="myListboxStyle">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red" />
        </Style.Resources>
    </Style>
</Window.Resources>

这是我的列表框:

<ListBox x:Name="lstNaes" Style="{StaticResource myListboxStyle}"  DisplayMemberPath="Name" Margin="5" SelectionMode="Extended"/>

颜色(红色)仅供测试。我真正想要的是默认的突出显示颜色,当ListBox(或ListView)失去焦点时,它不会改变。我不明白为什么找不到解决方案对我有用。

1 个答案:

答案 0 :(得分:4)

如果您使用的是Windows 8或更高版本,则应为ControlTemplate容器定义自定义ListViewItem

<ListBox x:Name="lstNaes" DisplayMemberPath="Name" Margin="5" SelectionMode="Extended">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" TargetName="Bd" Value="#1F26A0DA"/>
                                <Setter Property="BorderBrush" TargetName="Bd" Value="#a826A0Da"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" TargetName="Bd" Value="#3D26A0DA"/>
                                <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>