Silverlight:ScrollViewer难度大

时间:2010-10-23 13:47:25

标签: silverlight windows-phone-7

我正在制作一个wp7 Silverlight应用。我有一个ScrollViewer,其中包含十个元素的ListBox。但是,它只能让我向下滚动一点点。我能做错什么?

<ScrollViewer>
        <ListBox x:Name="StoryListBox"/>
    </ScrollViewer>

ListBox填充了以下类型的项目:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Image x:Name="Thumbnail" Grid.Column="0" Width="89" HorizontalAlignment="Left" VerticalAlignment="Top" />
    <TextBlock x:Name="Headline" Grid.Column="1" Grid.Row="0" Style="{StaticResource PhoneTextAccentStyle}" TextWrapping="Wrap" HorizontalAlignment="Left" Width="299" FontSize="23.333" VerticalAlignment="Top" />
    <TextBlock x:Name="Teaser" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Left" Style="{StaticResource PhoneTextSubtleStyle}"  TextWrapping="Wrap" VerticalAlignment="Top" Width="384"/>
</Grid>

我在这里做错了什么?

3 个答案:

答案 0 :(得分:2)

我没有看到你需要将ListBox嵌入ScrollViewer中的原因。如果ListBox的项目数多于它在可查看区域中显示的项目,则ListBox项目应自行滚动。如果使用Expression Blend编辑ListBox的样式,则样式将如下所示 -

<Style x:Key="ListBoxListStyle" TargetType="ListBox">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="Template">
        <Setter.Value>     
            <ControlTemplate TargetType="ListBox">
                <ScrollViewer 
                    x:Name="ScrollViewer" 
                    BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}" 
                    Background="{TemplateBinding Background}" 
                    Foreground="{TemplateBinding Foreground}" 
                    Padding="{TemplateBinding Padding}" >
                <ItemsPresenter/>
                </ScrollViewer>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

你可以看到嵌入在ListBox的ControlTemplate中的ScrollViewer,它负责滚动ListBoxItems。

答案 1 :(得分:1)

在我设置列表框的高度后,它(滚动)工作正常。

答案 2 :(得分:0)

当ScrollViewer小于它所包含的宽度或高度时,它只能工作。如果您没有指出ScrollViewer的宽度或高度,它将被拉伸以适应其内容,因此效果不会很完美。

因此,您需要为ScrollViewer设置固定大小。

顺便说一下,正如indyfromoz所说,ListBox已经有了一个ScrollViewer,所以你可以删除你的外部ScrollViewer,只需设置ListBox的大小。