none
如何重新触发MediaPlayer的Loaded事件 RRS feed

  • 问题

  • 在FlipView控件中使用MediaPlayer播放视频,MediaPlayer的Source属性设置是在Loaded方法中,代码如下:

    <MediaPlayer Name="myMediaPlay" Source="" MaxHeight="350" Margin="0,20,0,10" Visibility="{Binding VideoVisibility}" Loaded="MediaPlayLoaded" Unloaded="myMediaPlay_Unloaded" />

    private void MediaPlayLoaded(object sender, RoutedEventArgs e)
            {
                MediaPlayer mp = sender as MediaPlayer;
                if (item.VideoPath != null)
                {
                    mp.Source = new Uri(mp.BaseUri, item.VideoPath);
                }
            }

    问题是,当FlipView控件切换item时,视频文件未发生切换,我想原因时视频文件的source未被重新设置,所以在FlipView的item发生变化时需要重新触发MediaPlayer的Loaded事件。

    请问该如何通过代码的方式触发MediaPlay的Loaded事件?或者有其他的方式可以实现在FlipView切换item时播放新的视频文件。


    Xuesong Weibo http://weibo.com/highcedar

    2012年5月19日 6:51

答案

  • 你好,我已经通过邮件回复你的问题:

    Loaded事件在元素被第一次加载的时候触发,所以你的元素加载后只是切换FlipView 的Item,并不会造成Unloaded。 所以再次切换回来是不会再次触发Loaded。 不过你可以将Loaded中的代码独立封装成一个函数,一方面,在Loaded中可以调用,另一方面我们在切换回来时候(FlipView.SelectionChanged事件)也可以调用。

    private void MediaPlayLoaded(object sender, RoutedEventArgs e)
    {
      SetMPSource();
    }

    private void FlipView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
      Windows.UI.Xaml.Controls.FlipView flipview = sender as Windows.UI.Xaml.Controls.FlipView;
      if (flipview !=null && flipview.SelectedItem == [your item which contains ApplicationTheme MediaPlayer])
      {
        SetMPSource();
      }
    }

    void SetMPSource()
    {
      MediaPlayer mp = myMediaPlay;
      if (item.VideoPath != null)
      {
          mp.Source = new Uri(mp.BaseUri, item.VideoPath);
      }
    }

     


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 XuesongGao 2012年5月21日 14:40
    2012年5月21日 10:13
    版主

全部回复

  • 你好,我已经通过邮件回复你的问题:

    Loaded事件在元素被第一次加载的时候触发,所以你的元素加载后只是切换FlipView 的Item,并不会造成Unloaded。 所以再次切换回来是不会再次触发Loaded。 不过你可以将Loaded中的代码独立封装成一个函数,一方面,在Loaded中可以调用,另一方面我们在切换回来时候(FlipView.SelectionChanged事件)也可以调用。

    private void MediaPlayLoaded(object sender, RoutedEventArgs e)
    {
      SetMPSource();
    }

    private void FlipView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
      Windows.UI.Xaml.Controls.FlipView flipview = sender as Windows.UI.Xaml.Controls.FlipView;
      if (flipview !=null && flipview.SelectedItem == [your item which contains ApplicationTheme MediaPlayer])
      {
        SetMPSource();
      }
    }

    void SetMPSource()
    {
      MediaPlayer mp = myMediaPlay;
      if (item.VideoPath != null)
      {
          mp.Source = new Uri(mp.BaseUri, item.VideoPath);
      }
    }

     


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 XuesongGao 2012年5月21日 14:40
    2012年5月21日 10:13
    版主
  • 谢谢您的帮助。

    采用您的方法此问题已经解决。


    Xuesong Weibo http://weibo.com/highcedar

    2012年5月21日 14:30