14

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

WPF 新手,吉姆

这是 XAML 的ListBox

  // 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>
4

8 回答 8

34

使用StackPanel. 我认为这是因为它StackPanel总是尽可能大,以容纳它的所有孩子。尝试重新组织布局以删除StackPanel(使用 aGrid代替),看看是否有帮助。

于 2009-08-12T18:01:42.817 回答
9

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

<ListBox Height="200" 
         Name="NoteList"
         ScrollViewer.CanContentScroll="True"
         ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>
于 2013-10-04T07:20:18.350 回答
3

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

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

于 2009-08-12T17:59:38.390 回答
2

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

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

这应该会强制滚动条出现。

于 2012-10-19T16:11:03.437 回答
2

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

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

于 2013-02-07T22:58:07.940 回答
0

这个问题的另一个有效解决方案是ScrollViewerStackPanel.

于 2012-05-17T14:34:05.973 回答
0

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

于 2013-09-26T03:28:34.560 回答
0

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

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

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

于 2013-09-27T00:31:18.750 回答