18

我有一个带有 MediaElement 的 WPF 应用程序,用于运行视频。我不希望视频在加载时自动播放,所以我将 LoadedBehavior 设置为 Manual。

<MediaElement LoadedBehavior="Manual" 
              Source="foo.wmv" 
              MediaOpened="videoElement_MediaOpened" />

然而; 我希望元素在加载时显示视频的第一帧。有什么神奇的方法可以做到这一点吗?

4

3 回答 3

26

你还需要

ScrubbingEnabled="True"

然后在 Load 上设置一个事件

Loaded="Video1_Loaded"

在 Video1_Load 方法中添加以下内容:

Video1.Play();
Video1.Pause();

在调用 play 方法之前,不会渲染任何视频内容。因此,即使您将位置设置为超过第一帧,您也不会渲染任何数据。

我认为MediaElement.ScrubbingEnabled属性是关键。

获取或设置一个值,该值指示 MediaElement 在暂停时是否会更新用于查找操作的帧。这是一个依赖属性。

我尝试了相同的方法,ScrubbingEnabled但发现第一帧不会渲染。不确定这是否只是我为此使用的硬件。要记住的另一项是 MediaElement 的工作方式,一旦您调用,Play()您实际上可能并不完全Pause()在第一帧上,因此您可能希望在调用之前减少流上的音量并在调用Play()之后重置Pause()

于 2009-08-28T20:58:30.757 回答
9

您不必创建事件,请参阅以下内容

<MediaElement Source="foo.wmv" 
              MediaOpened="videoElement_MediaOpened" 
              LoadedBehavior="Pause" ScrubbingEnabled="True" />
于 2011-01-06T16:41:50.010 回答
2

我无法评论,所以这是我的答案:擦洗是指在 MediaElement 暂停时更新渲染的图像。

//Todo: Set your source

//if not stated in the xmal, you can still set this here.
Player.LoadedBehavior = MediaState.Manual;

//Turn scrubbing on
Player.ScrubbingEnabled = true;

Player.Pause();

Player.Position = TimeSpan.FromTicks(1);

感谢您的擦洗提示!

于 2014-07-29T05:11:19.960 回答