2012-03-06 58 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