Привязка анимации к ListViewItem в XAML - PullRequest
6 голосов
/ 02 января 2011

Я хотел бы назначить анимацию недавно созданному 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>

Есть ли способ получить доступ любым способом, как в jQuery: $ ('# listViewItemId'). FadeIn ();

Могу ли я привязать listView1.ItemsSource к некоторой доступной форме, в которой я увижу все элементы управления, которые находятся внутри него? И чем ими манипулировать?

Мне также не хотелось бы делать это вручную в C #, но если это невозможно сделать с помощью ItemTemplate, я все равно это сделаю.

Я новичок в XAML и не смог найти хорошего источника для правильного изучения XAML на C #.

1 Ответ

5 голосов
/ 03 января 2011

Ниже я разместил самый простой код и 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; }
    }
}

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...