2

各画像をリストボックス x 秒で表示する mediaElement を使用してスライドショーを作成しようとしています。

続行する前にコードで各画像を x 秒再生させるにはどうすればよいですか?

このコードは、Listbox1 という名前のリストボックスにすべての画像を追加します

    Dictionary<string, string> Listbox1Dict = new Dictionary<string, string>();

    private void SearchBtn_Click(object sender, RoutedEventArgs e)
    {
        Listbox1.Items.Clear();
        FolderBrowserDialog folderDialog = new FolderBrowserDialog();
        folderDialog.SelectedPath = "C:\\";

        DialogResult result = folderDialog.ShowDialog();
        if (result.ToString() == "OK")
            FileNameTextBox.Text = folderDialog.SelectedPath;
        string directory = FileNameTextBox.Text;
        var files = Directory.GetFiles(directory).Where(name => !name.EndsWith(".ini"));
        foreach (string file in files)
        {
            Listbox1.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file));
            Listbox1Dict.Add(System.IO.Path.GetFileNameWithoutExtension(file), file);
        }
    }

このコードはすべての画像をフルスクリーンで表示しますが、開始時に全員を最後の画像にスキップします。

private void button1_Click_1(object sender, RoutedEventArgs e)
{
    foreach (var selected in Listbox1.Items)
        {
            string s = selected.ToString();
            if (Listbox1Dict.ContainsKey(s))
            {
                mediaElement1.Visibility = Visibility.Visible;
                SearchBtn.Visibility = Visibility.Hidden;
                Listbox1.Visibility = Visibility.Hidden;
                FileNameTextBox.Visibility = Visibility.Hidden;
                mediaElement1.Source = new Uri(Listbox1Dict[s]);
                mediaElement1.Width = System.Windows.SystemParameters.PrimaryScreenWidth;
                mediaElement1.Height = System.Windows.SystemParameters.PrimaryScreenHeight;
                this.Background = new SolidColorBrush(Colors.Black);
                this.WindowStyle = WindowStyle.None;
                this.WindowState = WindowState.Maximized;
            }

    }
}

このコードを試して画像を1つずつ再生しようとしましたが、エラーが発生しました。コードのコメントを見てください:

private int currentSongIndex = -1;

void mediaElement1next(object sender, EventArgs e)
{
    if(currentSongIndex == -1)
    {
        currentSongIndex = Listbox1.SelectedIndex;
    }
    currentSongIndex++;
    if(currentSongIndex < Listbox1.Items.Count)
    {
        mediaElement1.Play(Listbox1.Items[currentSongIndex]); // No overload for method 'Play' takes 1 arguments    
    }
    else
    {
        // last song in listbox has been played
    }
}
4

4 に答える 4

0

このようなもの:

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            if (Listbox1.Items.Count > 0)
            {
                if (dispatcherTimer.IsEnabled)
                    dispatcherTimer.Stop();
                else
                {
                    curImage = 0;
                    dispatcherTimer.Start();
                }
            }
        }




private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    Dispatcher.Invoke((Action)delegate
    {
        ShowNextImage();
    }, null);            
}



private void ShowNextImage()
{
    if (curImage >= Listbox1.Items.Count)
        curImage = 0;

    var selected = Listbox1.Items[curImage];
    string s = selected.ToString();
    if (Listbox1Dict.ContainsKey(s))
    {
        mediaElement1.Visibility = Visibility.Visible;
        SearchBtn.Visibility = Visibility.Hidden;
        Listbox1.Visibility = Visibility.Hidden;
        FileNameTextBox.Visibility = Visibility.Hidden;
        mediaElement1.Source = new Uri(Listbox1Dict[s]);
        mediaElement1.Width = System.Windows.SystemParameters.PrimaryScreenWidth;
        mediaElement1.Height = System.Windows.SystemParameters.PrimaryScreenHeight;
        this.Background = new SolidColorBrush(Colors.Black);
        this.WindowStyle = WindowStyle.None;
        this.WindowState = WindowState.Maximized;
    }
}

と宣言

DispatcherTimer dispatcherTimer = new DispatcherTimer();
        int x = 2; //seconds
        private int curImage = 0;

そしていくつかの構成要素

dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, x);
于 2013-04-23T12:10:07.277 に答える