当焦点在WPF ListBox中移出时,所选项目会丢失样式

Vij*_*jay 24 wpf styles listbox

我有什么?

我有一个ListBoxXML文件中的项目.给定DynamicResourceStyle财产和书面触发器IsSelectedItemContainerStyle.

我想做什么?

即使焦点移出后,我仍希望保持所选项目突出显示ListBox.

我面临什么问题?

当我选择一个项目时,IsSelected触发器中指定的样式有效.但是,当我将焦点移出列表框(按Tab键或单击其他控件)时,所选项目将失去其样式.有什么方法可以保留所选的项目风格吗?

提前致谢!

Thi*_*ies 35

在某些情况下,引用的答案将解决问题,但并不理想,因为它在控件被禁用/只读时中断,并且它也会覆盖颜色方案,而不是利用它们.我的建议是在ListBox标签中添加以下内容:

<ListBox....>
    <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Border Name="Border" Padding="2" SnapsToDevicePixels="true">
                                <ContentPresenter />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="true">
                                    <Setter TargetName="Border" Property="Background"
                                            Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
        </Style>
    </ListBox.Resources>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

这将做什么是在选择它时(无论控制状态如何)在列表框项目上设置突出显示背景颜色.

我的回答是基于已经给出这些答案的答案的帮助,以及以下博客:http://blogs.vbcity.com/xtab/archive/2009/06/29/9344.aspx


SLa*_*aks 1

如果您仅设置背景颜色,请尝试ControlBrush按照此答案替换列表框。

  • 这是一个坏主意 - 对于关闭视觉主题的用户来说,这会搞乱很多事情 - 滚动条和按钮将更改为当前的突出显示颜色(默认情况下为蓝色 - 所以你的内部按钮并且 ListView 滚动条变成蓝色,非常糟糕!)。 (2认同)