2009-08-22 14 views
7

Chciałbym mieć animację, gdy pozycja w ListView zmienia położenie, więc powoli przesunie się do nowej pozycji. Albo w szablonie, albo w kodzie. Próbowałem już zstępować z (Virtualizing) StackPanel i przesłonić ArrangeOverride, aby zmienić pozycję i animować elementy. Problem polega na tym, że nie wiem, na jakiej pozycji znajdował się "przed" aktualizacją, więc mogłem ładnie przejść na nowe stanowisko. Próbowałem sprawdzić plik TranslateTransform elementu, zapisując go w słowniku, nadpisując OnItemChanged i zapisując OldPosition/Position .. ale żaden z nich nie działa, ponieważ wydaje się, że elementy są zawsze odtwarzane (z szablonu).(WPF) Animate ListView przemieszczanie pozycji

Jakieś inne sugestie?

+0

Może ten artykuł pomoże Matthias Shapiro: [How To Utwórz animowany ScrollViewer (lub ListBox) w WPF] (http://www.designersilverlight.com/2009/05/06/how-to-create-an-animated-scrollviewer-or-listbox-in-wpf/) – Ray

Odpowiedz

7

Zastosowanie FluidMoveBehavior zachowanie, to pozwoli Ci dużo życie łatwiejszym .

można zastosować to do jakiegokolwiek ItemsControl w następujący sposób

<ItemsPanelTemplate x:Key="ItemsPanelTemplate"> 
      <WrapPanel> 
       <i:Interaction.Behaviors> 
        <il:FluidMoveBehavior AppliesTo="Children" Duration="00:00:00.75"/> 
       </i:Interaction.Behaviors> 
      </WrapPanel> 
</ItemsPanelTemplate> 

można znaleźć ten problem w Microsoft.Expression.Interactions.dll, który jest instalowany wraz z Mieszanka 3

+0

Czy masz link do dokumentacji FluidMoveBehavior? Nie mogę niczego znaleźć. – Ray

+0

Dokumentacja o ograniczonej klasie znajduje się w Przewodniku użytkownika SDK Expression Blend, który jest instalowany wraz z Blend 3 – rravuri

+0

dzięki za wszystkie odpowiedzi .. ta metoda z zachowaniami wygląda ładnie, ale problem polega na tym, że wszystkie elementy są odtwarzane, a zatem wszystkie są animowane w pozycję (od góry). ten sam problem dotyczy wszystkich innych rozwiązań. Zajmę się używaniem DataGrid, ponieważ wydaje się, że mam kilka innych rzeczy, które chciałbym. –

1

w rzeczywistości problem został całkowicie rozwiązany przez Dan Crevier w 2006 roku. Sprawdź jego klasę PanelLayoutAnimator.

+0

+1. Właśnie sprawdziłem ten artykuł - zawiera on jedną klasę, próbka kodu była łatwa do zrozumienia, użycie jej wymaga tylko dodania pojedynczego atrybutu do XAML, a wynik wygląda dobrze. Zalecana. –

0

@rravuri odpowiedź pracuje dla mnie, trzeba określić jako dynamiczny zasobu można stosować bezpośrednio, a następnie nazwać dużej litery ItemsPanel = „{DynamicResource ItemsPanelTemplate}”

Powiązane problemy