WPF中MediaElement的MediaOpened事件不触发

问题描述:今天做Jaguar。用的WPF框架,其中每个Page中有一个MediaElement,总是跳转不到第二个Page。但是在调试的时候加入断点,就可以。

问题分析
用断点查找,发现第二个Page的MediaElement的MediaOpened不触发导致的问题。
MediaElement的.xaml是这样定义的:
<MediaElement Name="mediaElement" Margin="0" MediaOpened="mediaElement_MediaOpened" MediaEnded="mediaElement_MediaEnded" LoadedBehavior="Manual" UnloadedBehavior="Manual" />
MediaElement的.xaml.cs是这样定义的:
mediaElement.Source = new Uri(source);
mediaElement.Stop();

把.xaml.cs改为:
mediaElement.pause();
无用。
把.xaml.cs改为:
mediaElement.play();
video倒是在后台播了,但是还是不触发MediaOpened。

随后查找资料:
MediaOpened: 当媒体流已被验证和打开且已读取文件头时发生。如果 AutoPlay 属性设置为 false,则当发生 MediaOpened 事件时,将暂停媒体。另外要注意: Position 属性在发生 MediaOpened 事件之前为 null。虽然 Position 是可设置的。但在引发 MediaOpened 事件之前,不应尝试设置 Position。包括不应在 XAML 中设置初始 Position 值。
把所有Opened之前的Position改掉,无用。
我彻底被打败了,只好跳过MediaOpened事件,直接把MediaElement加上去。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注