In the example below I have a ListBox with dozens of font names in it.
I would have thought it would automatically have a vertical scrollbar on it so that you can se
ListBox
already contains ScrollViewer
. By default the ScrollBar
will show up when there is more content than space. But some containers resize themselves to accommodate their contents (e.g. StackPanel
), so there is never "more content than space". In such cases, the ListBox
is always given as much space as is needed for the content.
In order to calculate the condition of having more content than space, the size should be known. Make sure your ListBox
has a constrained size, either by setting the size explicitly on the ListBox
element itself, or from the host panel.
In case the host panel is vertical StackPanel
and you want VerticalScrollBar
you must set the Height on ListBox
itself. For other types of containers, e.g. Grid
, the ListBox
can be constrained by the container. For example, you can change your original code to look like this:
<Grid Name="grid1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ListBox Grid.Row="0" Name="lstFonts" Margin="3"
ItemsSource="{x:Static Fonts.SystemFontFamilies}"/>
</Grid>
</Grid>
Note that it is not just the immediate container that is important. In your example, the immediate container is a Grid
, but because that Grid
is contained by a StackPanel
, the outer StackPanel
is expanded to accommodate its immediate child Grid
, such that that child can expand to accommodate its child (the ListBox
).
If you constrain the height at any point — by setting the height of the ListBox
, by setting the height of the inner Grid
, or simply by making the outer container a Grid
— then a vertical scroll bar will appear automatically any time there are too many list items to fit in the control.
XAML ListBox Scroller - Windows 10(UWP)
<Style TargetType="ListBox">
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Visible"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Visible"/>
</Style>
I was having the same problem, I had a ComboBox followed by a ListBox in a StackPanel and the scroll bar for the ListBox was not showing up. I solved this by putting the two in a DockPanel instead. I set the ComboBox DockPanel.Dock="Top" and let the ListBox fill the remaining space.
I added a "Height" to my ListBox and it added the scrollbar nicely.
Scroll Bar is added to the List box automatically unless its visibility is set to Hidden. Whenever the size of List Items exceeds the one, which can be shown inside a list box vertical or horizontal list box can be seen during the run time.
In my case the number of items in the ListBox is dynamic so I didn't want to use the Height property. I used MaxHeight instead and it works nicely. The scrollbar appears when it fills the space I've allocated for it.