2009-11-02 9 views
6

Bien, esto va a sonar tonto, pero no puedo hacer que ScrollViewer funcione correctamente. Lo que hay que hacer esScrollViewer Altura para desplazarse automáticamente cuando el contenido se desborda en la página

  1. tener un uso página Silverlight 100% anchura/altura de la página HTML

  2. tienen una altura = 160px de control en la parte superior de la página Sliverlight, entonces tiene el resto (100% - 160px) será un ScrollViewer con contenido que cambia dinámicamente.

por lo que en la página HTML que tengo:

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

continuación, en el 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> 

Ahora, no importa lo que intente, ScrollViewer va todos los días expandir/contrato para contiene todos los elementos en el StackPanel, incluso si eso significa desbordamiento debajo de la pantalla pero sin barra de desplazamiento vertical.

La única forma en que puedo hacer que esto funcione es establecer Altura = 800 en el Visor de desplazamiento.

Respuesta

18

Si coloca un ScrollViewer dentro de un StackPanel, nunca funcionará. StackPanel siempre permitirá todo el espacio que requiera el contenido de ScrollViewer.

Debe utilizar una cuadrícula con dos filas en su lugar:

<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> 

El * en el segundo RowDefinition automáticamente hará que el ScrollViewer llenar tanto como sea posible, pero todavía mantienen dentro de su área visual y por lo tanto hacer que su ScrollViewer trabajo.

Cuestiones relacionadas