代码之家  ›  专栏  ›  技术社区  ›  Nick Heiner

Silverlight:ScrollViewer的困难

  •  1
  • Nick Heiner  · 技术社区  · 14 年前

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

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

    列表框 填充了以下类型的项:

    <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 回复  |  直到 14 年前
        1
  •  2
  •   bkaid    12 年前

    我不明白为什么需要将列表框嵌入到ScrollViewer中。如果列表框中的项多于其在可视区域中显示的项,则列表框项应自行滚动。如果使用Expression Blend编辑列表框的样式,则该样式将如下所示-

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

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

        2
  •  1
  •   Asha    12 年前

    在我设置了列表框的高度之后,它(滚动)工作得很好。

        3
  •  0
  •   Steve Czetty Wilko van der Veen    12 年前

    ScrollViewer只能在小于它包含的内容(宽度或高度)时工作。如果不指示ScrollViewer的宽度或高度,它将被拉伸以适合其内容,因此效果将不完美。

    顺便说一句,正如indyfromoz所说,一个列表框已经有了一个ScrollViewer,所以您可以删除外部的ScrollViewer,只需设置列表框的大小。