【问题标题】:WPF ListBox: Vertical scrollbar and focusWPF ListBox:垂直滚动条和焦点
【发布时间】:2016-01-28 10:11:37
【问题描述】:

我有两个关于 ListBox/WrapPanel 的问题。

首先,我的设置: 在 XAML 中,我有一个列表框。 ListBox 内部是一个 WrapPanel。我以编程方式将 ListBoxItems 添加到 WrapPanel。

问题一

ListBoxItems [StackPanel with Image and TextBlock] 从左到右,从上到下填充。但是,如果 ListBoxItem 的数量多于 ListBox 中的空间,则不会出现垂直滚动条。以下 XAML 代码使垂直滚动条可见。但是,它仍然处于禁用状态:

<ListBox Name="li1StandortLinks" Background="Transparent" MaxHeight="300" ScrollViewer.VerticalScrollBarVisibility="Visible">
    <WrapPanel Name="wp1StandortLinks" ItemHeight="80" ItemWidth="150" Width="755" />
</ListBox>

如何在需要时获得功能性的垂直滚动条?

问题二

当单击 ListBox 而不是 ListBoxItem [例如,在它们两个之间] 时,整个 ListBox 的背景会以蓝色突出显示。最初背景是透明的,即使单击 ListBox 本身,它也应该保持这种状态。捕捉 Click-Event 并将背景设置回透明似乎无济于事。蓝色的高亮颜色确实消失了,但不是 ListBox 背景变回透明,而是保持灰色。 我可以更改样式以使单击 ListBox 时颜色完全不改变吗?不过,我从来没有真正改变过 WPF 中的样式,所以我需要一个准确的解释。

【问题讨论】:

    标签: wpf listbox wrappanel


    【解决方案1】:

    这可能适用于问题一:

        <ListBox Name="li1StandortLinks" Background="Transparent" MaxHeight="300" ScrollViewer.VerticalScrollBarVisibility="Visible">
       <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel IsItemsHost="True" Orientation="Horizontal"  />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
    

    对于问题 2: 这也可能有效(更改列表框的样式)

    <ListBox Name="li1StandortLinks" Background="Transparent" MaxHeight="300" ScrollViewer.VerticalScrollBarVisibility="Visible">
    
    <ListBox.Style>
     <Style  TargetType="ListBox">
                <Style.Resources>
                    <!-- Background of selected item when focussed -->
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
                    <!-- Background of selected item when not focussed -->
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
    
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
                </Style.Resources>
            </Style>
    </ListBox.Style>
    </ListBox>
    

    【讨论】:

    • 您好 Ahmad,您的建议确实解决了问题 2,谢谢您! :) 不幸的是,问题 1 没有解决。我根据您的建议调整了代码,但它只添加了第二个滚动条,该滚动条也被禁用。我想知道如果我不限制宽度但对垂直方向不做同样的事情,为什么 WrapPanel 会创建一个水平滚动条。
    • 不客气,Kai,我很遗憾听到我以前没有使用过warppanel,但是我在ListBox Content里面放了一些东西很奇怪请问你这样做的目的是什么?也许我可以帮忙
    • 当然可以。我想用我的 ListBox 中的项目实现类似于资源管理器的外观。它们由一个图标和一个动态加载的文本组成。我想从左到右然后从上到下填充图标。 WrapPanel 给了我这种可能性。仅将项目添加到 ListBox 只会填充一个方向 [或“维度”],而不是两个方向。
    • 啊,我明白了,然后我认为您必须将变形面板用作列表框的项目面板,而不是作为内容我已经更正了上面的答案,看看它并尝试使用它,请让如果这能解决问题,我现在就来。
    • 它有效 :))) 完美。十分感谢!会将您的回复标记为答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2015-07-01
    • 2012-10-21
    • 1970-01-01
    • 2010-11-14
    • 2023-03-30
    • 2010-10-02
    相关资源
    最近更新 更多