Полоса прокрутки в списке не работает

У меня есть ListBox, который отображает список элементов управления WPF. Моя проблема в том, что вертикальная полоса прокрутки показывается, но отключена, даже если имеется достаточно элементов, которые нужно прокручивать ListBox. Еще один возможный факт состоит в том, что это содержится в Integration.ElementHost.

WPF noobie, Jim

Вот 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>

И XAML для элемента управления, отображаемого в каждом элементе ListBox:

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

Ответ 1

У меня были проблемы с видимостью полосы прокрутки при использовании StackPanel. Я думаю, это потому, что StackPanel всегда такой же большой, как и все его дети. Попробуйте реорганизовать макет, чтобы удалить StackPanel (вместо этого используйте Grid) и посмотрите, помогает ли это.

Ответ 2

Вам просто нужно ввести свойство Height, например:

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

Ответ 3

Хейя, я подозреваю, что может случиться, что ваш ListBox достаточно расширяется для каждого элемента, однако ListBox фактически исчезает со дна Containing Control.

Действительно ли ListBox останавливается правильно или просто исчезает? Попробуйте установить MaxHeight в ListBox и посмотреть, отобразится ли это полоса прокрутки. Вы должны иметь возможность установить для параметра VerticalScrollBarVisibility значение Auto, чтобы оно отображалось только при необходимости.

Ответ 4

Если окно списка находится внутри StackPanel, попробуйте выполнить следующие действия для своего списка ListBox

  • Установить ScrollViewer.VerticalScrollBarVisibility = "Авто"
  • Настройка свойства Height для ListBox на некоторую высоту, которую вы ожидаете увидеть.

Это должно заставить полосу прокрутки отображаться.

Ответ 5

Это довольно поздно, но любой, кто использует ListBox, вероятно, не должен иметь его в StackPanel. Как только я переключил родительский элемент управления Listbox с StackPanel на DockPanel с LastChildFill = True (где список был последним элементом управления), моя полоса прокрутки работала отлично.

Надеюсь, это поможет кому-то, кто не смог решить этот ответ.

Ответ 6

Другим решением этой проблемы, которое хорошо работает, является размещение ScrollViewer вокруг StackPanel.

Ответ 7

Другим решением с модификацией Dave является использование только ScrollViewer. Вы можете прокручивать, поместив мышь на ScrollView ScrollBar. Я использую его так, потому что мне не нравится, как ListBox перескакивает с элемента на элемент, а иногда и отсутствующие элементы из Top. Немного тяжело на глаза тоже. Мне нравится гладкая прокрутка ScrollViewer.

Ответ 8

Я просто столкнулся с той же проблемой, и вот небольшая демо-версия кода в проекте кода, которая наглядно показывает ее.

(Если вы хотите сэкономить время написания кода, чтобы увидеть различия сами:))

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