ListBoxуже содержит ScrollViewer. По умолчанию ScrollBarбудет отображаться, когда содержимого больше, чем места. Но некоторые контейнеры изменяют размер, чтобы вместить их содержимое (например StackPanel), поэтому «содержимого больше, чем места» не бывает. В таких случаях ListBoxвсегда предоставляется столько места, сколько необходимо для содержимого.
Размер должен быть известен, чтобы вычислить условие наличия большего количества содержимого, чем пространства. Убедитесь, что у вас ListBoxограниченный размер, задав размер явно в самом ListBoxэлементе или на главной панели.
В случае, если основная панель вертикальная, StackPanelи вы хотите, VerticalScrollBarвы должны установить высоту ListBoxсама по себе. Для других типов контейнеров, например Grid, контейнер ListBoxможет быть ограничен. Например, вы можете изменить исходный код, чтобы он выглядел так:
<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>
Обратите внимание, что важен не только непосредственный контейнер. В вашем примере непосредственным контейнером является a Grid, но поскольку Gridон содержится в a StackPanel, внешний StackPanelрасширяется для размещения своего непосредственного дочернего элемента Grid, так что этот дочерний элемент может расширяться для размещения своего дочернего элемента ( ListBox).
Если вы ограничите высоту в любой точке - установив высоту ListBox, установив высоту внутреннего Gridили просто сделав внешний контейнер a Grid- тогда вертикальная полоса прокрутки появится автоматически каждый раз, когда есть слишком много элементов списка для вписывается в контроль.
ListBoxвнутрь,ScrollViewerиListBoxItemsони растягивались настолько широко, насколько хотели, за пределы размераListBox. УдалениеScrollViewerи установкаScrollViewer.VerticalScrollBarVisibility="Visible"иScrollViewer.HorizontalScrollBarVisibility="Disabled"сделали свое дело. Спасибо за помощь!