我怎样才能得到我的列表框中的垂直滚动条?

在下面的例子中,我有一个列表框,其中有几十个字体名称。

我会认为它会自动有一个垂直滚动条,以便您可以select任何字体,不只是在列表中的第一个,但它没有。

所以我添加了一个“ScrollViewer”,并在右侧放置了一个“滚动条区域”,但是在滚动条区域没有滚动条,因此您可以滚动(!)。

为什么不是一个滚动条自动,我怎么强制它有一个滚动条?

<StackPanel Name="stack1"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="2*"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <ScrollViewer> <ListBox Grid.Row="0" Name="lstFonts" Margin="3" ItemsSource="{x:Static Fonts.SystemFontFamilies}"/> </ScrollViewer> </Grid> </StackPanel> 

你的解决scheme的问题是你将一个滚动条放在ListBox中,你可能想把它放在ListBox中。

如果您想在ListBox中强制滚动条,请使用ScrollBar.VerticalScrollBarVisibility附加属性。

 <ListBox ItemsSource="{Binding}" ScrollViewer.VerticalScrollBarVisibility="Visible"> </ListBox> 

将此值设置为Auto将根据需要popup滚动条。

ListBox已经包含ScrollViewer 。 默认情况下,当有更多的内容比空间ScrollBar会显示。 但是一些容器调整自己的大小以适应其内容(例如StackPanel ),所以永远不会有“比空间更多的内容”。 在这种情况下, ListBox总是会获得尽可能多的内容空间。

为了计算比空间更多的内容的条件,大小应该是已知的。 确保你的ListBox有一个约束的大小,或者通过在ListBox元素本身或者主机面板上显式地设置大小。

如果主机面板是垂直的StackPanel并且您想要VerticalScrollBar ,则必须在ListBox本身上设置高度。 对于其他types的容器,例如GridListBox可以被容器约束。 例如,您可以将您的原始代码更改为如下所示:

 <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> 

请注意,它不是直接的容器,是重要的。 在你的例子中,直接的容器是一个Grid ,但是因为该Grid被一个StackPanel包含,所以外层的StackPanel被扩展以容纳其直接的子网Grid ,使得该子可以扩展以容纳子( ListBox )。

如果通过设置ListBox的高度,设置内部Grid的高度,或者简单地将外部容器设置为Grid ,任何时候限制高度 – 那么随时会出现一个垂直滚动条列出项目以适应控制。

我添加了一个“高度”到我的列表框,它很好地添加了滚动条。

除非将其可见性设置为“隐藏”,否则滚动条将自动添加到“列表”框中。 每当列表项大小超过一个,可以在列表框内显示垂直或水平的列表框,在运行时可以看到。

在我的情况下,ListBox中的项目数是dynamic的,所以我不想使用Height属性。 我使用了MaxHeight,而且效果很好。 滚动条出现时,它填补了我分配的空间。

我有同样的问题,我有一个combobox后面的一个ListBox在一个StackPanel和列表框的滚动条没有显示出来。 我解决了这个问题,把它们放在DockPanel中。 我设置了ComboBox DockPanel.Dock =“Top”,让ListBox填充剩余空间。

XAML ListBox Scroller – Windows 10(UWP)

 <Style TargetType="ListBox"> <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Visible"/> <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Visible"/> </Style>