2009-11-02 92 views
6

好吧,這聽起來很愚蠢,但我無法讓ScrollViewer正常工作。 我需要做的是ScrollViewer當內容溢出頁面時自動滾動的高度

  1. 有HTML頁面

  2. 對Sliverlight的頁面頂部部分高度= 160像素控制的Silverlight頁面使用100%的寬度/高度,則有剩下的(100% - 160px)是一個帶有動態變化內容的ScrollViewer。

所以在HTML頁面我有:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 

然後在XAML:

<Grid x:Name="LayoutRoot" Height="Auto"> 
     <StackPanel Orientation="Vertical" Height="Auto">   
      <App:ASilverlightControl x:Name="Header" Height="160"/> 
      <ScrollViewer Name="svw" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Visible" Height="Auto" > 
       <StackPanel Orientation="Vertical" x:Name="DynamicContentHere"> 
       </StackPanel>             
      </ScrollViewer> 
     </StackPanel>  
    </Grid> 

現在,不管我怎麼努力,該ScrollViewer中總是支持擴展/壓縮到包含StackPanel中的所有元素,即使這意味着在屏幕下溢出但沒有垂直滾動條。

我能得到這個工作的唯一方法是將Height = 800設置爲ScrollViewer。

回答

18

如果你把一個ScrollViewer放在一個StackPanel裏面,它將永遠不會工作。 StackPanel將始終允許ScrollViewer的內容需要的所有空間。

您應該使用兩行,而不是一個網格:

<Grid x:Name="LayoutRoot" Height="Auto"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="160"/> 
    <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <App:ASilverlightControl x:Name="Header" Grid.Row="0"/> 
    <ScrollViewer Name="svw" Grid.Row="1" 
    HorizontalScrollBarVisibility="Disabled" 
    VerticalScrollBarVisibility="Visible"> 
    <StackPanel Orientation="Vertical" x:Name="DynamicContentHere"> 
     ... 
    </StackPanel>             
    </ScrollViewer> 
</Grid> 

在第二RowDefinition會自動使ScrollViewer中填寫儘可能多的,但仍然保持你的視覺範圍內,從而使您的ScrollViewer的*工作。

相關問題