2012-11-05 21 views
6

Mam ListView, który dodałem elementy wiążące. ListView wygląda następująco:Jak ustawić animacje/przejścia podczas dodawania elementów do listy listView?

<ListView 
     x:Name="ListView" 
     Height="auto" 
     Width="350" 
     ItemsSource="{Binding}" 
     Padding="0,0,-20,0" 
     Grid.Row="1" 
     Grid.Column="0" 
     Background="#EFEFEF" 
     ItemContainerStyle="{StaticResource ListViewStyle}"> 

     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Height="50" VerticalAlignment="Top" Margin="0,0,0,0" 
         <TextBlock Text="{Binding name} TextWrapping="NoWrap"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

Przy tej podstawowej konfiguracji istnieje już animacja, gdy element jest powiązany z Listą podstawową. Dziwnie do różnych animacji są używane. Pierwszy element pojawi się z prawej strony, a wszystkie pozostałe elementy będą się pojawiać. Szukam sposobu na animowanie wszystkich dodanych elementów w ten sam sposób (np. Wsuwanie z prawej strony). Byłem blokowania w generowane automatycznie (przez Blend) ListViewStyle od wielu godzin, ale nie mogłem znaleźć coś. Później okazało się, że jest możliwe, aby dodać tę właściwość wewnątrz stylu:

<Style x:Key="ListViewStyle" TargetType="ListViewItem"> 
     <Setter Property="Transitions"> 
      <Setter.Value> 
       <TransitionCollection> 
        <EntranceThemeTransition FromHorizontalOffset="400" /> 
        <PopupThemeTransition FromHorizontalOffset="400"/> 
       </TransitionCollection> 
      </Setter.Value> 
     </Setter> 
... 
</Style> 

EntranceThemeTransition i PopupThemeTransition wydaje się być odpowiednie właściwości, ponieważ zmienić zachowanie animacji. Ale nie wiem, jak z nich korzystać, ani jak je wyłączyć. Jak mogę uzyskać jedną animację (przesuń od prawej) do ListView?

Odpowiedz

9

To powinno działać:

<ListView 
    x:Name="lv"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel> 
       <VirtualizingStackPanel.ChildrenTransitions> 
        <TransitionCollection> 
         <EntranceThemeTransition 
          FromHorizontalOffset="400" /> 
        </TransitionCollection> 
       </VirtualizingStackPanel.ChildrenTransitions> 
      </VirtualizingStackPanel> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 

* Aktualizacja:

Można również użyć ListView.ItemContainerTransitions zdefiniowanie tych przejść.

+0

Chcę ponownie uruchomić tę animację, czy mogę ją wywołać z kodu? –

+0

Nie. Aby to zrobić, musisz podłączyć zwykłą animację 'Storyboard' lub per-frame. –

+2

Tyle frajdy, aby natknąć się na własną odpowiedź, gdy próbuje przypomnieć sobie, co "ChildrenTransitions" zostały nazwane 4 lata później ... :) –

Powiązane problemy