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

Jim*_*eri 13 wpf listbox scrollbar

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

吉姆,WPF noobie

以下是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>
Run Code Online (Sandbox Code Playgroud)

并在每个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>
Run Code Online (Sandbox Code Playgroud)

Joh*_*zek 28

使用时我的滚动条可见性有问题StackPanel.我认为这是因为StackPanel它总是需要包含所有孩子.尝试重新组织布局以删除StackPanel(使用Grid替代)并查看是否有帮助.

  • 是的,问题出在StackPanel上,而Grid可以解决此问题。谢谢@JohnMyczek (2认同)
  • 如果网格解决方案不能立即工作,请为包含 ListBox 的行设置 `&lt;RowDefinition Height="*" /&gt;`。 (2认同)

Mer*_*aya 6

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

<ListBox Height="200" 
         Name="NoteList"
         ScrollViewer.CanContentScroll="True"
         ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>
Run Code Online (Sandbox Code Playgroud)