代码之家  ›  专栏  ›  技术社区  ›  Vijay

当焦点移到WPF列表框中时,所选项目将丢失样式

  •  22
  • Vijay  · 技术社区  · 15 年前

    我有什么?

    我有一个 ListBox 用XML文件中的项填充。给定一个 DynamicResource 对于 Style 的属性和写入触发器 IsSelected 在里面 ItemContainerStyle .

    我想做什么?

    即使焦点移出 列表框 .

    我面临什么问题?

    当我选择一个项目时, 被选择的 触发器工作。但是,当我将焦点移出列表框(按Tab或单击其他控件)时,所选项目将丢失其样式。是否有任何方法可以保留所选项目样式?

    事先谢谢!

    2 回复  |  直到 13 年前
        1
  •  1
  •   Community Egal    7 年前

    如果只设置背景色,请尝试替换 ControlBrush 对于列表框,根据 this answer .

        2
  •  30
  •   Thies    14 年前

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

    <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