在横向和纵向模式下使用ScrollViewer更正滚动

时间:2012-04-20 07:21:31

标签: windows-phone-7 xaml scrollviewer

我是Windows Phone开发的新手,所以请光临我。我有一个带有PivotItem的简单Pivot,如下所示。

<StackPanel>
   <controls:Pivot x:Name="TopPivot" Title="Daily Comics" ItemsSource="{Binding ComicsListModel}" SelectionChanged="TopPivot_SelectionChanged" Height="762">
            <controls:Pivot.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding ComicName}"/>
                </DataTemplate>
            </controls:Pivot.HeaderTemplate>
            <controls:Pivot.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding PubDate}" HorizontalAlignment="Center" VerticalAlignment="Top" />
                        <ScrollViewer VerticalScrollBarVisibility="Auto">
                            <Image x:Name="ComicStrip" Source="{Binding ComicImage}" Stretch="UniformToFill" />
                        </ScrollViewer>
                    </StackPanel>
                </DataTemplate>
            </controls:Pivot.ItemTemplate>
   </controls:Pivot>
</StackPanel>

问题是我希望Image(名为“ComicStrip”)如果不完全可见则垂直滚动。这适用于纵向模式,但不适用于lanscape。在lanscape中,图像可以仅部分滚动,图像的底部部分将不可见。

我认为当我处于lanscape模式时,我必须告诉ScrollViewer它的高度,但我不知道如何以及什么是处理这种用例的最佳实践。看起来像是一个基本用例。

我应该做什么建议?

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是使用StackPanel作为Pivot项目模板!如果您使用网格,那么您应该没有任何问题。

将Pivot项目模板替换为:

<controls:Pivot.ItemTemplate>
    <DataTemplate>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition />
            </Grid.RowDefinitions>
            <TextBlock Text="{Binding PubDate}" />
            <ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="1">
                <Image x:Name="ComicStrip" Source="{Binding ComicImage}" Stretch="UniformToFill" />
            </ScrollViewer>
        </Grid>
    </DataTemplate>
</controls:Pivot.ItemTemplate>