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

时间:2009-09-22 19:53:31

标签: wpf listbox styles

我有什么?

我有一个ListBox填充了XML文件中的项目。给DynamicResource Style IsSelected属性,并在ItemContainerStyle中为ListBox写入触发器。

我想做什么?

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

我面临什么问题?

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

提前致谢!

2 个答案:

答案 0 :(得分:32)

The answer referenced在某些情况下会解决问题,但是当控件被禁用/只读时它会中断并且它也会覆盖颜色方案而不是利用它们时,它会不理想。我的建议是在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>

无论控制状态如何,这样做都会在列表框项目上设置突出显示背景颜色(无论控制状态如何)。

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

答案 1 :(得分:1)

如果您只设置背景颜色,请尝试按照this answer替换ListBox的ControlBrush