WP7:ScrollViewer视口大小

3

Windows Phone 7。我有一个 ScrollViewer,它位于 StackPanel 中,StackPanel 又在 PivotItem 中,PivotItem 又在 Pivot 中。在 ScrollViewer 上方,有一些其他控件。我的意图是让 ScrollViewer 占据可用的屏幕下部(约400像素),并且其内容可以在垂直方向上滚动(内容高度约为800像素)。

现在,当前没有垂直滚动 - 当我尝试拖动时,视图返回到之前的位置,就好像视口大小恰好与内容大小匹配。当我查看 ViewportHeight 属性时,它是 ~800 像素 - 与内容相同。

ScrollViewer 的高度未设置(“Auto”); 我以为它会恰好占据可用的空间。显然不是这种情况。问题 - 除了手动设置高度之外,还有没有一种实现“视口高度正好等于您剩余的垂直空间”的逻辑的方法?

编辑:这是 XAML,已删除不相关细节:

<Pivot x:Name="Root">
    <ctls:PivotItem>
        <ctls:PivotItem.Header>Title</ctls:PivotItem.Header>
        <StackPanel>

            <!-- More stuff here-->

            <ScrollViewer Name="MenuPanel" HorizontalScrollBarVisibility="Disabled">
                    <Canvas x:Name="Menu" HorizontalAlignment="Left" VerticalAlignment="Top">
                     </Canvas>
            </ScrollViewer>
        </StackPanel>
    </ctls:PivotItem>
</Pivot>
< p > 画布的宽度和高度在代码中设置。 < /p >
2个回答

3

两点:

  1. StackPanel 不允许其子元素自动占据剩余可用空间。使用 Grid 代替,并定义行高,这样可以使 ScrollViewer 在一个恰好垂直剩余的容器中。
  2. 你的 Canvas(在 ScrollViewer 内部)是顶部和左侧对齐,并且没有定义大小,因此高度和宽度均为 0 像素。

祝好运。

<Pivot x:Name="Root"> 
    <ctls:PivotItem> 
        <ctls:PivotItem.Header>Title</ctls:PivotItem.Header> 
        <Grid> 
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <Grid Grid.Row="0">
                <!-- More stuff here--> 
            </Grid>

            <ScrollViewer 
                Grid.Row="1" 
                Name="MenuPanel">

                    <Canvas x:Name="Menu" 
                          Height="500" 
                          Width="500"/>

            </ScrollViewer> 
        </StackPanel> 
    </ctls:PivotItem> 
</Pivot> 

2

假设没有看到您的XAML代码,但根据常见问题推断出以下内容

ScrollViewer实际上被分配了足够包含其所有内容项所需的空间。
要么给它一个绝对高度,要么将其包装在Grid中,这将限制它在StackPanel中可用的空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接