列表框中的滚动条无法正常工作

时间:2009-08-12 17:37:15

标签: wpf listbox scrollbar

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

WPF noobie,Jim

以下是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>

8 个答案:

答案 0 :(得分:27)

使用StackPanel时,滚动条可见性出现问题。我认为这是因为StackPanel始终与包含其所有孩子所需的一样大。尝试重新组织布局以删除StackPanel(改为使用Grid)并查看是否有帮助。

答案 1 :(得分:5)

您只需要引入 Height 属性,如下所示:

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

答案 2 :(得分:3)

Heya,我怀疑可能发生的事情是你的ListBox对于每个项目都在扩展,但是ListBox实际上正在从Containing Control的底部消失。

ListBox是否实际上正确停止或者它似乎消失了?尝试在ListBox上设置MaxHeight,看看是否显示滚动条。您应该能够将VerticalScrollBarVisibility设置为Auto,以使其仅在需要时显示。

答案 3 :(得分:2)

如果列表框位于StackPanel内,请尝试使用ListBox

的这些步骤
  1. 设置ScrollViewer.VerticalScrollBarVisibility =“Auto”
  2. 将ListBox的Height属性设置为您希望看到的某个高度。
  3. 这应该强制显示滚动条。

答案 4 :(得分:1)

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

希望这可以帮助那些问题没有被上述答案解决的人。

答案 5 :(得分:0)

此问题的另一个解决方案效果很好,就是在ScrollViewer周围加StackPanel

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

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