Here is an example that achieves it
A simple data model
public class ModelList : List<string> { public ModelList() { Add("John"); Add("Jack"); Add("Sue"); } public int CurrentIndex = 0; public string CurrentItem { get { return this[CurrentIndex]; } } }
Your Main Window
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } void ContinueAnimation() { ModelList list = Resources["ModelList"] as ModelList; if ( list.CurrentIndex < (list.Count -1)) { list.CurrentIndex += 1; Storyboard b = Resources["FadeOut"] as Storyboard; b.Begin(); } } private void Start_Click(object sender, RoutedEventArgs e) { ContinueAnimation(); } private void FadeOut_Completed(object sender, EventArgs e) { ContinueAnimation(); } }
Your main window xaml
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:app="clr-namespace:WpfApplication1" Title="MainWindow" Width="1000" Height="1000"> <Window.Resources> <app:ModelList x:Key="ModelList" /> <Storyboard x:Key="FadeOut" x:Name="FadeOut" Completed="FadeOut_Completed"> <DoubleAnimation Duration="0:0:0.5" Storyboard.TargetName="MyLabel" Storyboard.TargetProperty="Opacity" To="0" /> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MyLabel" Storyboard.TargetProperty="Text"> <DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{Binding Source={StaticResource ModelList}, Path=CurrentItem}" /> </ObjectAnimationUsingKeyFrames> <DoubleAnimation BeginTime="0:0:0.5" Duration="0:0:1" Storyboard.TargetName="MyLabel" Storyboard.TargetProperty="Opacity" To="1" /> </Storyboard> </Window.Resources> <StackPanel> <TextBlock Name="MyLabel" Width="100" Height="24" Background="AliceBlue" Text="{Binding Source={StaticResource ModelList}, Path=CurrentItem}" /> <Button Name="Start" Height="30" HorizontalAlignment="Left" Click="Start_Click"> Start </Button> </StackPanel> </Window>