2013-09-24 14 views
5

ho questo ScrollViewer, cui aggiungo elementi programically:ScrollViewer.ChangeView restituisce false

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

Quando chiamo ChangeView come qui di seguito restituisce false e non succede nulla. Perché non dovrebbe funzionare?

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

Stesso qui. Per ora sto usando ScrollToVerticalOffset, anche se è deprecato. – Tristan

+0

Ho lo stesso problema con ScrottToHorizontalOffset. Passare a ChangeView (0, null, null) come consigliato dagli avvertimenti del compilatore lo interrompe, non avviene alcuno scorrimento. – dex3703

risposta

0

Credo che questo potrebbe essere un fattore di alcune delle impostazioni di proprietà. Prova a togliere il tuo ScrollViewer al minimo e cambia anche il tuo offset. Si sta dicendo a scorrere fino a 400 quando la vostra altezza è di 400 in modo che possa essere un fattore di non essere in grado di scorrere fino a dove si vuole (provare a impostare a (null, 200, null, null) per vedere se funziona.

<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

Proprio avuto lo stesso problema - il problema di base era che il mio codice ha chiamato ChangeView() due volte nello stesso ciclo - una volta su un thread non-GUI (che ha restituito true, ma ovviamente non abbiamo davvero scorrere fino la posizione desiderata in quanto non era sul filo GUI), e più tardi in un metodo dispatcher sul thread GUI (che ha restituito false, perché lo ScrollViewer apparentemente vide che già aveva ottenuto una nuova posizione di scorrimento che non stava mostrando ancora).

Una volta ho rimosso i ChangeView() chiamate che non sono state fatte sul filo GUI ha funzionato bene. Sarebbe utile se la documentazione di ScrollViewer spiegherebbe in quali casi tornerà false, anche se ...

Problemi correlati