带有调度程序计时器的图像幻灯片显示在Windows应用商店中

时间:2015-03-12 06:22:26

标签: c# image windows-store-apps windows-8.1 slideshow

我想在我的Windows应用商店应用中使用调度程序计时器制作幻灯片图像。但是,我有一个问题:如果图像已到达最终图像,幻灯片显示不想重复第一张图像的幻灯片放映,而是直接重复第二张图像。例如:我有5张图片,当它到达第五张图片时,幻灯片显示不需要重复第一张图片,而是直接重复第二张图片。

这是我的xaml:

<Image x:Name="sceneriesBtn" IsDoubleTapEnabled="False" VerticalAlignment="Bottom" Tapped="sceneriesBtn_Tapped" Height="242" Stretch="UniformToFill"/>

这是我的xaml.cs代码:

public Home()
        {
            this.InitializeComponent();          
        }

        DispatcherTimer playlistTimer1 = null;
        List<string> Images1 = new List<string>();

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            ImageSource1();
        }
        private void ImageSource1()
        {
            Images1.Add("17-Ijen-Crater.jpg");
            Images1.Add("19-Ranu-kumbolo-Semeru.jpg");
            Images1.Add("30-Kelud-blitar.jpg");
            Images1.Add("31-sarangan_lake.jpg");
            Images1.Add("390-ranu_agung.jpg");
            playlistTimer1 = new DispatcherTimer();
            playlistTimer1.Interval = new TimeSpan(0, 0, 5);
            playlistTimer1.Tick += playlistTimer_Tick1;
            sceneriesBtn.Source = new BitmapImage(new Uri("ms-appx:///Sceneries/" + Images1[count1]));
            playlistTimer1.Start();
        }
        int count1 = 0;
        void playlistTimer_Tick1(object sender, object e)
        {
            if (Images1 != null)
            {
                if (count1 == Images1.Count - 1)
                    count1 = 0;
                if (count1 < Images1.Count)
                {
                    count1++;
                    ImageRotation1();
                }
            }
        }
        private void ImageRotation1()
        {
            sceneriesBtn.Source = new BitmapImage(new Uri("ms-appx:///Sceneries/" + Images1[count1].ToString()));
        }
  }
}

如何解决?

1 个答案:

答案 0 :(得分:1)

逻辑缺陷。在您的代码中,计数器会更改两次,首先从Images1.Count - 1更改为0,然后在第二个if语句中从0更改为1

我的修复

if (count1 < Images1.Count)
   count1++;

if (count1 >= Images1.Count)
      count1 = 0;

ImageRotation1();