2013-09-24 23 views
5

mam ten ScrollViewer, które dodaję elementy programically:ScrollViewer.ChangeView zwraca 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> 

Kiedy zadzwonić ChangeView jak poniżej zwraca false i nic się nie dzieje. Dlaczego nie miałoby to działać?

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

To samo tutaj. Na razie używam ScrollToVerticalOffset, mimo że jest przestarzałe. – Tristan

+0

Mam ten sam problem z ScrottToHorizontalOffset. Zmiana na ChangeView (0, null, null), jak zalecają ostrzeżenia kompilatora, powoduje jego przerwanie - nie ma miejsca przewijanie. – dex3703

Odpowiedz

0

Wierzę, że to może być czynnik niektórych z twoich ustawień nieruchomości. Spróbuj rozebrać swój ScrollViewer na minimum, a także zmienić przesunięcie. Mówisz, aby przewinąć do 400, gdy twój wzrost wynosi 400, więc może to być czynnik, który nie pozwala na przewijanie do wybranego miejsca (spróbuj ustawić (null, 200, null, null), aby sprawdzić, czy to działa.

<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

prostu miał ten sam problem - problem bazową tutaj było to, że mój kod nie nazywają ChangeView() dwa razy w tym samym cyklu - raz na wątku non-GUI (który powrócił true, ale oczywiście tak naprawdę nie wskaż żądaną pozycję, ponieważ nie było jej w wątku GUI), a później w metodzie dyspozytora na wątku GUI (który zwrócił false, ponieważ scrollViewer najwyraźniej zobaczył, że otrzymał już nową pozycję przewijania, której jeszcze nie pokazywał).

Po usunięciu wywołań ChangeView(), które nie zostały wykonane w wątku GUI, działało poprawnie. Byłoby pomocne, gdyby dokumentacja z ScrollViewer wyjaśniła, w jakich przypadkach zwróci false, ale ...