鉴于以下XMAL,为什么ListBox的垂直滚动条没有绑定到100个字符串的ObservableCollection。如果我将第二行的高度从*更改为固定为500的内容,则会出现一个滚动条,但显然我希望行高可以使用(这是我理解*的意思)
<UserControl x:Class="SimpleStack.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<DataTemplate x:Key="ListBoxItemTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Place holder"/><TextBlock Text="{Binding}"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="Azure">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="The Text" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"/>
<ListBox ItemsSource="{Binding ListOfNumbers}" Grid.Row="1" Grid.Column="0"
ItemTemplate="{StaticResource ListBoxItemTemplate}"/>
<TextBlock Text="Place Holder" Grid.Row="1" Grid.Column="1"/>
</Grid>
</UserControl>
答案 0 :(得分:1)
*
行高 实际上是“其他所有可用的”(如果你有多个* s,它会将其除掉)。我猜你的实际问题是“无论什么都可用”是无限的。最有可能的是,用户控件被给予无限量的空间,因此它正在扩展以占用所需的空间。确保将用户控件限制在实际的可见空间,并且列表框应该获得其滚动条。
答案 1 :(得分:1)
我的理解是,由于测量/排列布局系统,您实际上是在告诉ListBox它可以拥有它所需的所有垂直空间而不受约束。因此,默认ListBox模板中的内部ScrollViewer永远不会被限制为触发滚动条显示。
我可以看到两种方法来解决这个问题:
- 在ListBox上指定ScrollViewer.VerticalScrollBarVisibility="Visible"
以强制内部ScrollViewer始终显示滚动条。
- 使用实际的ScrollViewer来包含ListBox并让它提供滚动功能而不是内部ListBox中的功能(你可能需要调整填充和边框以使其看起来正确):
<ScrollViewer Grid.Row="1" Grid.Column="0">
<ListBox ItemsSource="{Binding ListOfNumbers}"
ItemTemplate="{StaticResource ListBoxItemTemplate}"/>
</ScrollViewer>
我更喜欢第二种方式,因为它只显示垂直滚动条,如果真的有必要的话。