2013-09-24 5 views
5

Ich habe dieses Scroll, die ich Elemente in der programically:ScrollViewer.ChangeView false zurück

<ScrollViewer VerticalSnapPointsAlignment="Near" 
          VerticalSnapPointsType="Mandatory" 
          VerticalScrollMode="Enabled" 
          VerticalScrollBarVisibility="Hidden" 
          ZoomMode="Disabled" 
          Width="400" 
          Height="400" 
          x:Name="MainFeatureScrollViewer" 
          ViewChanging="ScrollViewer_ViewChanging"> 
       <StackPanel x:Name="MainFeatureStackPanel" /> 
      </ScrollViewer> 

Als ich Change nenne es wie unten beschrieben false zurück und nichts passiert. Warum sollte das nicht funktionieren?

bool result = this.MainFeatureScrollViewer.ChangeView(null, 400, null, true); 
+0

das gleiche hier ist. Momentan verwende ich ScrollToVerticalOffset, obwohl es veraltet ist. – Tristan

+0

Ich habe das gleiche Problem mit ScrottToHorizontalOffset. Das Ändern in ChangeView (0, null, null), wie die Warnungen des Compilers anzeigen, unterbricht es - es findet kein Scrollen statt. – dex3703

Antwort

0

Ich glaube, dies könnte ein Faktor von einigen Ihrer Eigenschaften Einstellungen sein. Versuchen Sie, Ihren ScrollViewer auf ein Minimum zu reduzieren und auch Ihren Offset zu ändern. Sie sagen ihm, dass er auf 400 scrollen soll, wenn Ihre Höhe 400 ist, also könnte es ein Faktor sein, dass er nicht zu der gewünschten Stelle scrollen kann (versuchen Sie es auf (null, 200, null, null) einzustellen, um zu sehen, ob das funktioniert.

<ScrollViewer VerticalSnapPointsAlignment="Near" 
          VerticalScrollBarVisibility="Hidden" 
          ZoomMode="Disabled" 
          Width="400" 
          Height="400" 
          x:Name="MainFeatureScrollViewer" 
          ViewChanging="ScrollViewer_ViewChanging"> 
       <StackPanel x:Name="MainFeatureStackPanel" /> 
</ScrollViewer> 

bool result = this.MainFeatureScrollViewer.ChangeView(null, 200, null, true); 
1

Gerade hatten das gleiche Problem - das Basis Problem hier war, dass mein Code ChangeView() zweimal im selben Zyklus angerufen hat - einmal auf einem nicht-GUI-Thread (die true zurückgegeben, aber natürlich blätterte nicht wirklich die gewünschte Position, da sie nicht im GUI-Thread war, und später in einer Dispatcher-Methode im GUI-Thread (die false zurückgab, weil der scrollViewer offenbar gesehen hatte, dass er bereits eine neue Scroll-Position erhalten hatte, die er noch nicht angezeigt hatte).

Sobald ich die ChangeView() Aufrufe entfernt, die nicht auf dem GUI-Thread getan wurden, funktionierte es gut. Es würde helfen, wenn die Dokumentation von ScrollViewer erklären würde, in welchen Fällen es false zurückgibt, obwohl ...