WP7:ScrollViewer视口大小

时间:2012-03-06 21:05:28

标签: silverlight windows-phone-7 xaml scrollviewer

Windows Phone 7.我在Pivot内的PivotItem内的StackPanel内部有一个ScrollViewer。在ScrollViewer上方,还有一些其他控件。我的目的是ScrollViewer占用屏幕的下半部分(~400px),其内容垂直滚动(内容高度~800px)。

现在,现在没有垂直滚动 - 当我尝试拖动时,视图将返回上一个位置,就好像视口大小与内容大小完全匹配一样。当我查看ViewportHeight属性时,它是~800px - 与内容相同。

未设置ScrollViewer的高度(“自动”);我假设它将占用可用空间。显然情况并非如此。问题 - 没有手动设置高度,有没有办法实现“视口高度正是你剩下多少垂直空间”的逻辑?

编辑:这是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>

画布的宽度和高度在代码中设置。

2 个答案:

答案 0 :(得分:3)

两件事:

  1. StackPanel不允许其子项自动占用剩余的可用空间。相反,使用网格和已定义的行。这允许您的ScrollViewer位于一个容器中,该容器是垂直保持的精确高度。
  2. 你的画布(在ScrollViewer中)与顶部和左边对齐,没有定义尺寸,正好是0像素高,0像素宽。
  3. 祝你好运。

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

答案 1 :(得分:2)

在没有看到你的XAML的情况下这是假设的 - 但基于常见的问题

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