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

To jest kod dla panelu sterującego, który jest wypełniany w środowisku wykonawczym za pomocą wielu WrapPanels. Scroll Viewer przewija panele - po jednym na raz - co sprawia, że ​​jest to bardzo niewygodne, ponieważ wszystkie panele mają różne rozmiary. Próbowałem tego one przez ustawienie właściwości ScrollViewer.CanContentScroll = "False" w StackPanel podczas usuwania go w ScrollViewer, nie pomogło - pasek przewijania zniknął w ogóle. Jakie jest rozwiązanie dla płynnego paska przewijania?Płynne przewijanie w obrębie panelu stosu w wpf

+0

Nie jestem pewien, ale może stackpanel lub inny pojemnik wykorzystuje wirtualizację. WPF czasami lubi stosować domyślną właściwość "IsVirtualizing = true" do wielu swoich kontenerów. – Dror

Odpowiedz

14

owinąć StackPanel w innym panelu

WPF za ScrollViewer próbuje przejść całe elementy w polu widzenia w czasie, dlatego widać jumpy zachowanie przewijania. Poprzez zagnieżdżenie StackPanel w innym panelu, ScrollViewer spróbuje przewinąć cały StackPanel do widoku, który jest zbyt duży, aby korzystać z płynnego przewijania.

Oto przykład - Zdejmowanie DockPanel daje jumpy zwój, ale z nim dostaniesz gładkie przewijanie zachowanie

<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

Zawijam StackPanel z DockPanel, ale pasek przewijania w ogóle zniknął. – Sergey

+0

@Sergey Masz 'Wysokość' ustawiony na twoim' StackPanel', więc ogranicza to, jak duży może być StackPanel. Przenieś atrybut 'Wysokość' do twojego' ScrollViewer' i powinien zadziałać. – Rachel

+0

jesteś gwiazdą rocka! bardzo dziękuję – Sergey

Powiązane problemy