【问题标题】:Scrollbar in Listbox not working列表框中的滚动条不起作用
【发布时间】:2010-11-19 01:13:29
【问题描述】:

我有一个 ListBox,它显示 WPF 控件列表。 我的问题是显示垂直滚动条,但即使有足够的项目 ListBox 应该是可滚动的,它也会被禁用。 另一个可能相关的事实是,它包含在 Integration.ElementHost 中。

WPF 新手,吉姆

这是ListBox 的 XAML:

  // for brevity I removed the Margin and Tooltip attributes

  <Grid x:Class="Xyzzy.NoteListDisplay"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Name="stackPanel" Orientation="Vertical"
                ScrollViewer.VerticalScrollBarVisibility="Visible">
        <StackPanel Orientation="Horizontal">
            <CheckBox Name="AllRecent" IsChecked="False" >View All Recent</CheckBox>
            <CheckBox Name="AscendingOrder" IsChecked="False">Descending Order</CheckBox>
            <Button Name="btnTextCopy" Click="btnCopyText_Click">Copy All</Button>
        </StackPanel>
        <ListBox Name="NoteList"
                 ScrollViewer.CanContentScroll="True"
                 ScrollViewer.VerticalScrollBarVisibility="Visible">
        </ListBox>
      </StackPanel>
  </Grid>

以及每个ListBox项目中显示的控件的XAML:

  <UserControl x:Class="Xyzzy.NoteDisplay"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
      <StackPanel Orientation="Vertical">
        <StackPanel Orientation="Horizontal">
          <TextBlock Name="Heading" FontSize="10">Note Heading</TextBlock>
          <Button Name="btnCopyText" Height="20" FontSize="12"
                          Click="btnCopyText_Click">Copy
          </Button>
        </StackPanel>
        <TextBlock Name="Body" FontSize="14">Note Body</TextBlock>
      </StackPanel>
    </Grid>
  </UserControl>

【问题讨论】:

    标签: wpf listbox scrollbar


    【解决方案1】:

    我在使用StackPanel 时遇到了滚动条可见性问题。我认为这是因为StackPanel 总是足够大,可以容纳所有的孩子。尝试重新组织布局以删除 StackPanel(改用 Grid),看看是否有帮助。

    【讨论】:

    • 当我将 Listbox 放入 Grid 而不是 StackPanel 时,问题就消失了。这是 WPF 代码错误、WPF 设计错误还是故意的 WPF 行为??
    • 我认为这正是 StackPanel 的工作方式。在您的情况下,StackPanel 与 ListBox 无需滚动所需的高度一样高,然后 StackPanel 在底部被“切断”。
    • 是的,问题出在 StackPanel 上,Grid 解决了这个问题。谢谢@JohnMyczek
    • 如果网格解决方案不能立即工作,请为包含 ListBox 的行设置&lt;RowDefinition Height="*" /&gt;
    • 你在开玩笑吗?我只花了 5 个小时试图弄清楚为什么我的列表框不正常,就是这样。谢谢!
    【解决方案2】:

    你只需要引入 Height 属性,像这样:

    <ListBox Height="200" 
             Name="NoteList"
             ScrollViewer.CanContentScroll="True"
             ScrollViewer.VerticalScrollBarVisibility="Visible">
    </ListBox>
    

    【讨论】:

    • 确认此解决方案适用于 StackPanel,尽管接受的答案另有说明。此外,“可见”可以更改为“自动”,因此您只在需要时获得滚动条。并且 Height 可以更改为 MinHeight。
    • @MichelKeijzers - 对高度进行硬编码仅在您无法调整任何大小时才有效。只要有人调整窗口大小,就会失败。您需要以一种自动调整大小的方式进行操作。
    【解决方案3】:

    嘿,我怀疑可能发生的情况是您的 ListBox 对每个项目都足够扩展,但是 ListBox 实际上从包含控件的底部消失了。

    ListBox 是否真的正确停止了,还是似乎消失了?尝试在 ListBox 上设置 MaxHeight 并查看是否会出现滚动条。您应该能够将 VerticalScrollBarVisibility 设置为 Auto 以使其仅在需要时出现。

    【讨论】:

    • 我应该提到我尝试完全按照您的建议限制列表框的大小。结果没有改善。
    • Rach 对我来说是对的。控件刚刚展开未绑定,然后消失在我的控件范围之外。我曾经将列表框放在网格行/列中,宽度/高度设置为自动。一旦将这些设置为 '*',ListBox 就会开始运行。
    【解决方案4】:

    如果列表框位于 StackPanel 中,请为您的 ListBox 尝试这些步骤

    1. 设置 ScrollViewer.VerticalScrollBarVisibility="Auto"
    2. 将 ListBox 的 Height 属性设置为您希望看到的某个高度。

    这应该会强制显示滚动条。

    【讨论】:

      【解决方案5】:

      这已经很晚了,但是任何使用 ListBox 的人可能都不应该将它放在 StackPanel 中。一旦我使用 LastChildFill=True(列表框是最后一个控件)将列表框的父控件从 StackPanel 切换到 DockPanel,我的滚动条就可以正常工作了。

      希望这对上述答案未解决问题的人有所帮助。

      【讨论】:

        【解决方案6】:

        解决此问题的另一种行之有效的方法是在StackPanel 周围放置一个ScrollViewer

        【讨论】:

          【解决方案7】:

          对 Dave 进行修改的另一个解决方案是仅使用 ScrollViewer。您只能通过将鼠标放在 ScrollView 的 ScrollBar 上来滚动。我这样使用它是因为我不喜欢 ListBox 如何从一个项目跳到另一个项目,并且有时会从顶部丢失项目。眼睛也有点硬。我喜欢 ScrollViewer 的流畅滚动。

          【讨论】:

          【解决方案8】:

          我刚刚遇到了同样的问题,这里有一个关于代码项目的小代码演示,可以直观地显示它。

          (如果您想节省自己编写代码的时间来自己查看差异:))

          http://www.codeproject.com/Tips/659066/ListBox-and-Panels-in-WPF

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-28
            • 1970-01-01
            • 2014-01-19
            相关资源
            最近更新 更多