2009-11-02 20 views
6

これはばかげているようですが、ScrollViewerを正しく動作させることができません。私がする必要がどのような はScrollViewerコンテンツがページのオーバーフローしたときに自動的にスクロールする高さ

  1. はSilverlightページの使用をお持ちのHTMLページの100%幅/高さ

  2. は、Sliverlightのページの上部に高さ= 160ピクセルコントロールを持って、その後持っています残りの部分(100%〜160ピクセル)は動的に変化するコンテンツを持つScrollViewerになります。

ので、HTMLページに私が持っている:XAMLで、その後

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

<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のコンテンツに必要なすべてのスペースを常に許可します。 *第二RowDefinitionで自動的ScrollViewerのは、できるだけ多くを埋めるようになりますが、それでもあなたの視覚的なエリア内でそれを維持するので、あなたの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> 

あなたは代わりに二列でグリッドを使用する必要があります作業。

関連する問題