ListBox
enthä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 ListBox
immer 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. ListBox
Stellen Sie sicher, dass Ihre Größe eingeschränkt ist, indem Sie die Größe entweder explizit für das ListBox
Element selbst oder über das Hostfenster festlegen.
Wenn das Host-Panel vertikal ist StackPanel
und Sie möchten VerticalScrollBar
, müssen Sie die Höhe auf sich ListBox
selbst einstellen . Für andere Arten von Behältern, zum Beispiel Grid
, die ListBox
durch 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 Grid
in a enthalten ist StackPanel
, wird der äußere Container StackPanel
erweitert, 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 Grid
oder einfach den äußeren Container Grid
festlegen -, wird automatisch eine vertikale Bildlaufleiste angezeigt, wenn zu viele Listenelemente vorhanden sind in die Steuerung passen.
ListBox
Innere eingelegtScrollViewer
und dieListBoxItems
dehnten sich so weit, wie sie wollten, außerhalb der Größe desListBox
. Entfernen derScrollViewer
und EinstellungScrollViewer.VerticalScrollBarVisibility="Visible"
undScrollViewer.HorizontalScrollBarVisibility="Disabled"
hat den Trick gemacht. Danke für Ihre Hilfe!