2011-01-02 13 views
6

Chciałbym przypisać animację do nowo utworzonego ListViewItem. Podobnie jak FadeIn lub FadeOut. Mam ten kod XAML:Powiązanie animacji z ListViewItem w XAML

<ListView Height="320" HorizontalAlignment="Left" Margin="630,0,0,0" Name="listView1" VerticalAlignment="Top" Width="222" ItemsSource="{Binding}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid Name="mainGrid"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition></ColumnDefinition> 
        <ColumnDefinition Width="150"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <Grid.Resources> 

       </Grid.Resources> 
       <Image Name="img" Source="{Binding AvatarSource}" Width="32" Margin="8"></Image> 
       <Image Source="{Binding IconSource}" Width="16" Margin="0,-28,32,0"></Image> 
       <TextBlock Grid.Column="1" Margin="0,8,0,0" TextWrapping="Wrap"> 
        <Run Text="{Binding Name}" FontWeight="Bold"></Run> 
        <LineBreak/> 
        <Run Text="{Binding StatusText}"></Run> 
       </TextBlock> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Czy istnieje sposób, aby uzyskać dostęp do dowolnego sposób jak w jQuery. $ ('# ListViewItemId') fadeIn();

Czy mogę przywrócić listView1.ItemsSource do jakiejś dostępnej formy, w której zobaczę wszystkie kontrolki, które są w środku? A zamiast nimi manipulować?

Chciałbym również, aby nie robić tego ręcznie w języku C#, ale jeśli jest to niemożliwe do osiągnięcia przy użyciu ItemTemplate, zrobię to tak czy inaczej.

Jestem nowy w XAML i nie mogłem znaleźć żadnego dobrego źródła do nauki XAML z C# we właściwy sposób.

Odpowiedz

5

Poniżej zamieściłem najprostszy kod i XAML, który pozwala uzyskać to, co chcesz. Stamtąd, aby działał we własnej aplikacji.

<Window x:Class="ListviewItemLoadedSpike.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <Storyboard x:Key="FadeIn"> 
      <DoubleAnimation 
       Storyboard.TargetProperty="Opacity" 
       Duration="0:0:2" From="0" To="1"/> 
     </Storyboard> 
     <Style TargetType="Label" x:Key="FadingLabel"> 
      <Style.Triggers> 
       <EventTrigger RoutedEvent="Loaded"> 
        <BeginStoryboard Storyboard="{StaticResource FadeIn}"/> 
       </EventTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 
    <StackPanel> 
     <ListBox ItemsSource="{Binding Data}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Label Content="{Binding Info}" 
          Style="{StaticResource FadingLabel}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 

     </ListBox> 
     <Button Name="AddButton" 
       Click="AddButton_Click"> 
      Add Item 
     </Button> 
    </StackPanel> 
</Window> 

using System.Collections.ObjectModel; 
using System.Windows; 

namespace ListviewItemLoadedSpike 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     private int counter; 
     public MainWindow() 
     { 
      InitializeComponent(); 
      Data=new ObservableCollection<Datum>(); 
      DataContext = this; 
     } 

     private void AddButton_Click(object sender, RoutedEventArgs e) 
     { 
      counter++; 
      Data.Add(new Datum(counter.ToString())); 
     } 

     public ObservableCollection<Datum> Data { get; set; } 
    } 

    public class Datum 
    { 
     public Datum(string info) 
     { 
      Info = info; 
     } 

     public string Info { get; set; } 
    } 
} 

Powodzenia!

+0

Wielkie dzięki! Takie proste, miłe. –

+0

Warto wspomnieć, że zachowanie Fluid UI w silverlight robi to za Ciebie. Jestem całkiem pewien, że Blend poradziłby sobie z tym również w WPF. Jesse Liberty napisać dobry artykuł na ten temat tutaj http://jesseliberty.com/2009/11/20/silverlight-4-fluid-ui/ – Stimul8d

+0

Ten jest dobrym przykładem.Ale chcę animować listviewitem jeden po drugim w kolejności. Tutaj wszystkie elementy są wyświetlane w tym samym czasie. Jak mogę zaimplementować animację fadein, gdy element zostanie dodany do lisview? – Sachin123

Powiązane problemy