ScrollViewer高度在内容溢出页面时自动滚动

时间:2009-11-02 13:23:26

标签: silverlight xaml

好的,这听起来很傻,但我无法让ScrollViewer正常工作。 我需要做的是

  1. 让Silverlight页面使用HTML页面的100%宽度/高度

  2. 在Sliverlight页面的顶部有一个Height = 160px控件,然后其余部分(100% - 160px)是一个动态更改内容的ScrollViewer。

  3. 所以在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中的所有元素,即使这意味着在屏幕下溢出但没有垂直滚动条。

    我能让它工作的唯一方法是将高度= 800设置为ScrollViewer。

1 个答案:

答案 0 :(得分: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工作。