Полоса прокрутки в списке не работает
У меня есть 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