为什么此列表框没有垂直滚动条

时间:2010-10-18 14:40:04

标签: silverlight layout

鉴于以下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>

2 个答案:

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

我更喜欢第二种方式,因为它只显示垂直滚动条,如果真的有必要的话。