积极答复者
如何重新触发MediaPlayer的Loaded事件

问题
-
在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
答案
-
你好,我已经通过邮件回复你的问题:
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
全部回复
-
你好,我已经通过邮件回复你的问题:
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