2012-03-06 38 views
3

Windows Phone 7.我有一个ScrollViewer在Pivot内的PivotItem内的StackPanel内。在ScrollViewer上方,还有一些其他控件。我的意图是ScrollViewer采用可用的屏幕下部(〜400px),其内容垂直滚动(内容高度〜800px)。WP7:ScrollViewer视口大小

现在,现在没有垂直滚动 - 当我尝试拖动视图时,视图将返回到前一位置,就好像视口大小完全匹配内容大小。当我查看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> 

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

回答

3

两件事情:

  1. 一个StackPanel不允许它的孩子自动占用的可用空间的其余部分。使用网格,而是使用定义的行。这允许您的ScrollViewer位于一个容器中,该容器是垂直保持的确切高度。
  2. 您的Canvas(ScrollViewer内部)对齐到顶部和左侧,并且没有定义大小,正好是0像素高和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,这是assummed - 但基于常见问题

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

+1

简单地包装在网格中似乎没有帮助... – 2012-03-06 21:41:06