ListBoxenthält bereits ScrollViewer. Standardmäßig wird das angezeigt ScrollBar, wenn mehr Inhalt als Speicherplatz vorhanden ist. Einige Container ändern jedoch die Größe, um ihren Inhalt aufzunehmen (z. B. StackPanel), sodass es nie "mehr Inhalt als Speicherplatz" gibt. In solchen Fällen wird dem ListBoximmer so viel Platz eingeräumt, wie für den Inhalt benötigt wird.
Um die Bedingung zu berechnen, dass mehr Inhalt als Speicherplatz vorhanden ist, sollte die Größe bekannt sein. ListBoxStellen Sie sicher, dass Ihre Größe eingeschränkt ist, indem Sie die Größe entweder explizit für das ListBoxElement selbst oder über das Hostfenster festlegen.
Wenn das Host-Panel vertikal ist StackPanelund Sie möchten VerticalScrollBar, müssen Sie die Höhe auf sich ListBoxselbst einstellen . Für andere Arten von Behältern, zum Beispiel Grid, die ListBoxdurch den Behälter eingeschränkt werden. Sie können beispielsweise Ihren ursprünglichen Code so ändern, dass er folgendermaßen aussieht:
<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>
Beachten Sie, dass nicht nur der unmittelbare Container wichtig ist. In Ihrem Beispiel ist der unmittelbare Container a Grid, aber da dieser Gridin a enthalten ist StackPanel, wird der äußere Container StackPanelerweitert, um sein unmittelbares Kind aufzunehmen Grid, sodass dieses Kind erweitert werden kann, um sein Kind (das ListBox) aufzunehmen.
Wenn Sie die Höhe an einem beliebigen Punkt einschränken - indem Sie die Höhe des ListBox, die Höhe des inneren Gridoder einfach den äußeren Container Gridfestlegen -, wird automatisch eine vertikale Bildlaufleiste angezeigt, wenn zu viele Listenelemente vorhanden sind in die Steuerung passen.
ListBoxInnere eingelegtScrollViewerund dieListBoxItemsdehnten sich so weit, wie sie wollten, außerhalb der Größe desListBox. Entfernen derScrollViewerund EinstellungScrollViewer.VerticalScrollBarVisibility="Visible"undScrollViewer.HorizontalScrollBarVisibility="Disabled"hat den Trick gemacht. Danke für Ihre Hilfe!