在另一个窗口中收听MediaEnded事件

时间:2012-03-07 05:03:25

标签: c# wpf events window mediaelement

我正在制作一个简单的C#WPF视频播放器应用程序。

我有2个Windows:MainWindow(父窗口)包含MediaElement以显示视频。 PlaylistWindow(子窗口)是包含ListBox的窗口,该ListBox显示appRoot路径中的所有.avi文件。

目前,当我双击ListBox项目时,它会在MainWindow中播放该视频。我希望有一个自动播放功能,以便当前视频结束时自动播放列表中的下一个项目。

我希望PlaylistWindow能够监听由MainWindow中的MediaElement触发的MediaEnded事件,以便我可以对PlaylistWindow中的ListBox执行某些操作。

如何从PlaylistWindow订阅MediaEnded事件?

编辑添加: 我最终使用了不同的方法,如下所示。 我不认为这是最好的方法,但它对我有用。

public partial class MainWindow : Window
{
    PlaylistWindow PLWindow = new PlaylistWindow();

    public MainWindow()
    {
        InitializeComponent();
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        PLWindow.Owner = this;
        PLWindow.Show();
    }

    private void videoWindow_Ended(object sender, EventArgs e)
    {
        PLWindow.playNext();
    }
}

public partial class PlaylistWindow : Window
{
    public void playNext()
    {
        if (playListBox.SelectedIndex < playListBox.Items.Count - 1)
        {
            playListBox.SelectedIndex = playListBox.SelectedIndex + 1;
        }
        else { playListBox.SelectedIndex = 0; }

        (Owner as MainWindow).playVideo(playListBox.SelectedValue.ToString());
    }
}

如果可以发布代码示例,我仍然可以学习如何在PlaylistWindow中监听MediaEnded事件。

1 个答案:

答案 0 :(得分:1)

从主窗口提升自定义.net事件(此自定义事件将由Media结束事件引发)并在播放列表窗口中订阅它,在此事件的事件处理程序中返回下一个.avi文件的文件名