ListBox
enthält bereits ScrollViewer
. Standardmäßig wird die ScrollBar
angezeigt, wenn mehr Inhalt als Platz vorhanden ist. Einige Container passen sich jedoch ihren Inhalten an (z. B. StackPanel
), so dass niemals "mehr Inhalt als Platz" vorhanden ist. In solchen Fällen wird dem ListBox
immer so viel Platz zugewiesen, wie für den Inhalt benötigt wird.
Um die Bedingung zu berechnen, mehr Inhalt als Platz zu haben, sollte die Größe bekannt sein. Stellen Sie sicher, dass Ihre ListBox
eine eingeschränkte Größe aufweist, indem Sie entweder explizit die Größe des Elements ListBox
oder des Host-Steuerfelds festlegen.
Wenn das Host-Panel vertikal StackPanel
ist und Sie VerticalScrollBar
möchten, müssen Sie die Höhe auf ListBox
selbst einstellen. Für andere Arten von Behältern, z.B. Grid
kann der ListBox
durch den Container eingeschränkt werden. Zum Beispiel können Sie Ihren ursprünglichen Code ändern wie folgt aussehen:
<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 es nicht nur die unmittelbare Umschließung ist, was wichtig ist. In Ihrem Beispiel ist der unmittelbare Behälter ein Grid
, sondern weil die Grid
von einem StackPanel
enthalten ist, wird die äußereen StackPanel
erweitert, um sein unmittelbares Kind Grid
, so unterbringen, dass das Kind erweitern sein Kind (die ListBox
) aufzunehmen.
Wenn Sie die Höhe an jedem Punkt — durch Einstellen der Höhe der ListBox
begrenzen, indem die Höhe der inneren Grid
Einstellung oder einfach durch den äußeren Behälter macht ein Grid
— dann eine vertikale Bildlaufleiste automatisch jedes Mal erscheint Es gibt zu viele Listenelemente, die in das Steuerelement passen.
In meinem Fall habe ich auch die 'ListBox' in einem' ScrollViewer' gestellt hatte und die 'ListBoxItems' streckten so breit wie sie wollten außerhalb der Größe der 'ListBox'. Das Entfernen des 'ScrollViewers' und das Einstellen von' ScrollViewer.VerticalScrollBarVisibility = "Visible" 'und' ScrollViewer.HorizontalScrollBarVisibility = "Disabled" 'hat den Trick gemacht. Vielen Dank für Ihre Hilfe! – mandarin