Solved

Pause and Resume WPF Slideshow

Posted on 2009-05-12
3
2,296 Views
Last Modified: 2013-12-17
hi , I am attaching a code , to play a slideshow of pictures from your "MyPictures" folder of your PC

Create a new project of the type "WPF Application" and replace window1.xaml and window1.xaml.cs code with my code below

I would like to implement a funtionality to Pause and Resume WPF Slideshow
When the slide show is paused, a text on the top right corner should be displayed as "Paused"

Make Sure you have pictures in "MyPictures" folder of your PC
Please help me implement these events...
//In window.xaml
 

<Window x:Class="MySlideShow.Window1"

        x:Name="Window"

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

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

    Title="My SlideShow" Height="480" Width="640" WindowStartupLocation="CenterScreen" WindowState="Maximized" Background="#FF000000">

    <Grid x:Name="LayoutRoot">

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="*"/>

        </Grid.ColumnDefinitions>

        <Rectangle x:Name="rec1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

        <Rectangle x:Name="rec2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

    </Grid>

</Window>
 
 

// window1.xaml.cs code
 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Media.Animation;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Windows.Threading;
 

namespace MySlideShow

{

    /// <summary>

    /// Interaction logic for Window1.xaml

    /// </summary>

    public partial class Window1 : Window

    {
 

        string path;

        string[] files;

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

        int count = 0;

        DispatcherTimer dt = new DispatcherTimer();

        int currentRect = 1;

        double fade = 0.5;
 

        public Window1()

        {

            InitializeComponent();

            this.Show();
 

            //Get The Picture files from the My Pictures Directory

            files = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures));
 

            for (int i = 0; i < files.Length; i++)

            {

                if (files[i].ToUpper().EndsWith(".JPG") ||

                    files[i].ToUpper().EndsWith(".PNG") ||

                    files[i].ToUpper().EndsWith(".GIF") ||

                    files[i].ToUpper().EndsWith(".TIF"))

                {

                    showPictures.Add(files[i]);

                }

            }
 

            dt_Tick(this, new EventArgs());

            dt.Interval = TimeSpan.FromSeconds(2);

            dt.Tick += new EventHandler(dt_Tick);
 

        }
 

        void dt_Tick(object sender, EventArgs e)

        {

            if (showPictures.Count < 1)

            {

                MessageBox.Show("No Images Available");

                this.Close();

                dt.Stop();

            }

            else

            {

                Image img = new Image();

                img.Source = new BitmapImage(new Uri(showPictures[count]));
 

                if (currentRect == 1)

                {

                    rec1.Opacity = 0;

                    VisualBrush vb = new VisualBrush(img);

                    vb.Stretch = Stretch.UniformToFill;

                    rec1.Fill = vb;

                    rec1.BeginAnimation(FrameworkElement.OpacityProperty, new DoubleAnimation(1, TimeSpan.FromSeconds(fade)));

                    rec2.BeginAnimation(FrameworkElement.OpacityProperty, new DoubleAnimation(0, TimeSpan.FromSeconds(fade)));

                   

                }

                else

                {

                    rec2.Opacity = 0;

                    VisualBrush vb = new VisualBrush(img);

                    vb.Stretch = Stretch.UniformToFill;

                    rec2.Fill = vb;

                    rec2.BeginAnimation(FrameworkElement.OpacityProperty, new DoubleAnimation(1, TimeSpan.FromSeconds(fade)));

                    rec1.BeginAnimation(FrameworkElement.OpacityProperty, new DoubleAnimation(0, TimeSpan.FromSeconds(fade)));

                }

                dt.Start();

                if (currentRect == 1)

                {

                    currentRect = 2;

                }

                else { currentRect = 1; }

            }

            if (count == showPictures.Count - 1)

            {

                count = 0;

            }

            else

            {

                count++;

            }

        }

    }

}

Open in new window

0
Comment
Question by:ctrlctrl
  • 2
3 Comments
 
LVL 5

Accepted Solution

by:
rendaduiyan earned 500 total points
ID: 24372175
your implementation is based on a  timer. if you want to pause, you have to stop the timer.
So you have to write a event handler for KeyPressed or mouse button, in which you can stop the timer.
something like this.

public bool PreFilterMessage(ref Message m)

        {

            if (m.Msg == WM_KEYDOWN)

            {

                return HandleKeys((Keys)((int)m.WParam) & Keys.KeyCode);

            }

            return false;

        }

public bool HandleKeys(Keys keycode)

        {

            bool ret = true;

            switch (keycode)

            {

                case Keys.P:dt.stop; break;

                case Keys.S:dt.start;break;

            }

            return ret;

        }

Open in new window

0
 

Author Comment

by:ctrlctrl
ID: 24374397
Hi rendaduiyan,


Thank You for the solution,

But will the slideshow resume at the same picture where it paused? with this implementation
0
 

Author Comment

by:ctrlctrl
ID: 24377158
excellent .. It worked
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
A theme is a collection of property settings that allow you to define the look of pages and controls, and then apply the look consistently across pages in an application. Themes can be made up of a set of elements: skins, style sheets, images, and o…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Need to grow your business through quality cloud solutions? With everything required to build a cloud platform and solution, you may feel like the distance between you and the cloud is quite long. Help is here. Spend some time learning about the Con…

939 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now