在XAML中将动画绑定到ListViewItem

Dan*_*l G 6 c# wpf xaml

我想为新创建的ListViewItem分配一个动画.像FadeIn或FadeOut.我有这个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>
Run Code Online (Sandbox Code Playgroud)

有没有办法访问jQuery中的任何方式:$('#listViewItemId').fadeIn();

我可以将listView1.ItemsSource绑定到某个可访问的表单,在其中我将看到其中的所有控件吗?而不是操纵它们?

我也不想在C#中手动执行此操作,但如果使用ItemTemplate无法完成此操作,我仍会执行此操作.

我是XAML的新手,我找不到任何好的资源来以正确的方式用C#学习XAML.

Dab*_*rnl 5

下面我发布了最简单的代码和XAML,实现了你想要的.从那里开始使其在您自己的应用程序中工作.

<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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

祝好运!