2011-12-13 20 views
6
<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True"> 
       <StackPanel Name="basePanel" Orientation="Vertical" Height="450" /> 
      </ScrollViewer> 

Este es el código para el panel de la pila que se completa en el tiempo de ejecución con múltiples WrapPanels. Scroll Viewer se desplaza por los paneles, uno a la vez, lo que lo hace realmente inconveniente porque todos los paneles son de diferentes tamaños. Intenté esto one estableciendo la propiedad ScrollViewer.CanContentScroll = "False" en StackPanel al eliminarlo en ScrollViewer, no ayudó - la barra de desplazamiento desapareció. ¿Cuál es la solución para la barra de desplazamiento suave?Desplazamiento uniforme dentro del panel de la pila en wpf

+0

No estoy seguro, pero tal vez usted StackPanel o algún otro recipiente utiliza la virtualización. WPF a veces le gusta aplicar una propiedad predeterminada "IsVirtualizing = true" a muchos de sus contenedores. – Dror

Respuesta

14

envolver su StackPanel en otro panel

ScrollViewer de WPF intenta desplazarse elementos entero en vista a la vez, por lo que se ve el comportamiento de desplazamiento nervioso. Al anidar el StackPanel en otro Panel, el ScrollViewer intentará desplazar todo el StackPanel a la vista, que es demasiado grande para que pueda usar el desplazamiento suave.

He aquí un ejemplo - Extracción de la DockPanel le dará un pergamino con saltos, pero con él se puede obtener un comportamiento desplazamiento suave

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True" Height="250"> 
    <DockPanel> 
     <StackPanel Name="basePanel" Orientation="Vertical" Width="200"> 
      <Rectangle Height="75" Fill="Red" Width="200" /> 
      <Rectangle Height="50" Fill="Orange" Width="200" /> 
      <Rectangle Height="75" Fill="Yellow" Width="200" /> 
      <Rectangle Height="75" Fill="Green" Width="200" /> 
      <Rectangle Height="75" Fill="Black" Width="200" /> 
      <Rectangle Height="75" Fill="Purple" Width="200" /> 
     </StackPanel> 
    </DockPanel> 
</ScrollViewer> 
+0

Envolví StackPanel con DockPanel pero la barra de desplazamiento desapareció. – Sergey

+0

@Sergey Tiene el conjunto 'Height' en su' StackPanel', por lo que limita el tamaño del StackPanel. Mueva el atributo 'Height' a su' ScrollViewer' y debería funcionar. – Rachel

+0

eres un rockstar! muchas gracias – Sergey

Cuestiones relacionadas