Image SlideShow Using DispatchTimer in Windows Store Apps

In my previous article I explained DispatchTimer in Windows Store Apps. Now, here I will just use the DispatchTimer to execute a particular block continuously until it stops.

You can see my previous article from here:

How to use Timer in Windows Store Application Using XAML.

I create a Windows Store Application in which I will show you an example of image rotation or you can say a slide show of images using the DispatchTimer Class in XAML.

So, let's begin to create an application.

Procedure

Choose Blank Template of Windows Store using XAML.

Here I design UI using XAML code.

<Page

    x:Class="TimerInWindowsStoreApps.ImageSlideShow"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:local="using:TimerInWindowsStoreApps"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d">

 

    <Grid x:Name="LayoutRoot" Background="LightBlue">

        <Grid Margin="0,50">

            <Grid.RowDefinitions>

                <RowDefinition Height="410"/>

                <RowDefinition Height="*"/>

            </Grid.RowDefinitions>

            <StackPanel Grid.Row="0">

                <Border BorderBrush="Black" Grid.Row="0" BorderThickness="1" Width="700">

                   <Image x:Name="ImageSource" AutomationProperties.Name="ImageSource" VerticalAlignment="Top" Stretch="Fill" Height="380" Width="700">                      

                    </Image>

                </Border>

            </StackPanel>

            <Grid x:Name="Input" Grid.Row="1" Margin="0,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Center">

                <StackPanel Orientation="Horizontal">

                    <Button x:Name="playSlideshow" Grid.Row="1"  Margin="0,0,10,0" Click="playSlideshow_Click" Style="{StaticResource PlayAppBarButtonStyle}"/>

                    <Button x:Name="pauseSlideshow" Grid.Row="1"  Margin="0,0,10,0" Click="pauseSlideshow_Click" Style="{StaticResource PauseAppBarButtonStyle}"/>

                    <Button x:Name="previousItem" Grid.Row="1" Margin="0,0,10,0" Click="previousItem_Click" Style="{StaticResource PreviousAppBarButtonStyle}"/>

                    <Button x:Name="nextItem" Grid.Row="1"  Margin="0,0,10,0" Click="nextItem_Click" Style="{StaticResource NextAppBarButtonStyle}"/>

                </StackPanel>

            </Grid>

        </Grid>

    </Grid>

</Page>

In the above code I used an image control and 4 buttons for play, pause, next and previous slides of images.

Now, Let's put our .cs code in MainPage.xaml.cs file.

Here I just create a list of images and set the property and Tick event of the DispatchTimer.

DispatcherTimer playlistTimer = null;

List<string> Images = new List<string>();

protected override void OnNavigatedTo(NavigationEventArgs e)

{

      Images.Add("Chrysanthemum.jpg");

      Images.Add("Desert.jpg");

      Images.Add("Hydrangeas.jpg");

      Images.Add("Jellyfish.jpg");

      Images.Add("Koala.jpg");

      playlistTimer = new DispatcherTimer();

      playlistTimer.Interval = new TimeSpan(0, 0, 5);

      playlistTimer.Tick += playlistTimer_Tick;

      ImageSource.Source = new BitmapImage(new Uri("ms-appx:///Assets/" + Images[count]));

}

Increment the counter of list to fetch next image.

void playlistTimer_Tick(object sender, object e)

{

            if (Images != null)

            {

                if (count == Images.Count - 1)

                    count = 0;

                if (count < Images.Count)

                {

                    count++;

                    ImageRotation();

                }

            }

}


Now, set the source of the image on the basis of a counter of the list in the ImageRotation Method.
 

private void ImageRotation()

{

    ImageSource.Source = new BitmapImage(new Uri("ms-appx:///Assets/" + Images[count].ToString()));

}

Complete Code of .cs file:
 

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using Windows.Foundation;

using Windows.Foundation.Collections;

using Windows.UI.Xaml;

using Windows.UI.Xaml.Controls;

using Windows.UI.Xaml.Controls.Primitives;

using Windows.UI.Xaml.Data;

using Windows.UI.Xaml.Input;

using Windows.UI.Xaml.Media;

using Windows.UI.Xaml.Media.Imaging;

using Windows.UI.Xaml.Navigation;

 

namespace TimerInWindowsStoreApps

{

    public sealed partial class ImageSlideShow : Page

    {

        public ImageSlideShow()

        {

            this.InitializeComponent();

        }

        DispatcherTimer playlistTimer = null;

        List<string> Images = new List<string>();

        protected override void OnNavigatedTo(NavigationEventArgs e)

        {

            Images.Add("Chrysanthemum.jpg");

            Images.Add("Desert.jpg");

            Images.Add("Hydrangeas.jpg");

            Images.Add("Jellyfish.jpg");

            Images.Add("Koala.jpg");

            playlistTimer = new DispatcherTimer();

            playlistTimer.Interval = new TimeSpan(0, 0, 5);

            playlistTimer.Tick += playlistTimer_Tick;

            ImageSource.Source = new BitmapImage(new Uri("ms-appx:///Assets/" + Images[count]));

        }

        int count = 0;

        void playlistTimer_Tick(object sender, object e)

        {

            if (Images != null)

            {

                if (count == Images.Count - 1)

                    count = 0;

                if (count < Images.Count)

                {

                    count++;

                    ImageRotation();

                }

            }

        }

        private void ImageRotation()

        {

            ImageSource.Source = new BitmapImage(new Uri("ms-appx:///Assets/" + Images[count].ToString()));

 

        }

        private void playSlideshow_Click(object sender, RoutedEventArgs e)

        {

            if (Images != null)

            {

                playlistTimer.Start();

            }

        }

        private void pauseSlideshow_Click(object sender, RoutedEventArgs e)

        {

            if (Images != null)

            {

                playlistTimer.Stop();

            }     

        private void previousItem_Click(object sender, RoutedEventArgs e)

        {

            if (Images != null)

            {

                count--;

                if (count >= 0)

                {

                    ImageRotation();

                }

                else

                {

                    count = Images.Count - 1;

                    ImageRotation();

                }

            }

        }

        private void nextItem_Click(object sender, RoutedEventArgs e)

        {

            if (Images != null)

            {

                count++;

                if (count < Images.Count)

                {

                    ImageRotation();

                }

                else

                {

                    count = 0;

                    ImageRotation();

                }

            }

        }

    }

}

 

Now, build the application and run it. Click on the Play button to start the SlideShow.

You will see that after every 5 seconds the image will change. You can also pause the SlideShow.


Image-Rotation-In-Windows-Store-Apps.jpg


Similar Articles