2009-08-28 23 views
16

私はビデオを実行するために使用するMediaElementを持つWPFアプリケーションを持っています。私はロードされたときにビデオを自動再生したくないので、LoadedBehaviorをManualに設定します。WPF MediaElementのビデオの最初のフレームを表示

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

ただし、ロードされると、要素の最初のフレームが表示されます。これを行うための魔法の方法はありますか?

答えて

21

あなたはまた、

ScrubbingEnabled="True" 

が続いて以下を追加しVideo1_Load方法でロード

Loaded="Video1_Loaded" 

にイベントを設定する必要があります。ビデオコンテンツの

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

どれも前にレンダリングされませんplayメソッドが呼び出されます。したがって、最初のフレームを過ぎて位置を設定しても、レンダリングされるデータはありません。

私はMediaElement.ScrubbingEnabledプロパティが鍵だと思います。

が一時停止しながらのMediaElementは、シーク動作のため フレームを更新するかどうか を示す値を取得または設定します。これは依存関係プロパティです。

私はScrubbingEnabledなしで同じアプローチを試みましたが、最初のフレームはレンダリングされませんでした。私はこれに使用しているハードウェアだけであるかどうかはわかりません。他の項目は、MediaElementの動作方法です.Play()を呼び出すと、最初のフレームでは実際にはPause()できないことがあるため、再生を呼び出す前にストリームの音量を下げて呼び出してからリセットすることができます一時停止する。 スクラブはのMediaElementが一時停止されたときにレンダリングされた画像を更新する参照:

+1

Thx - これが機能します!私は、Play()Pause()トリガーに慣れていないと言わなければなりません。それを示唆している他の人を見たが、アプローチがちょっと「ハッキリ」であることがわかった。しかし、これが唯一の方法であれば、私たちはそれと一緒に生きなければならないと思う。 ScrubbingEnabledは素晴らしいプロパティですが、起動時に最初のビデオフレームを表示することとは関係ありません。 – stiank81

8

あなたがイベントを作成する必要はありませんので、ここで私の答えは、

<MediaElement Source="foo.wmv" 
       MediaOpened="videoElement_MediaOpened" 
       LoadedBehavior="Pause" ScrubbingEnabled="True" /> 
+0

あなたは再生でMediaElementを制御することはできません。停止... LoadedBehaviorをmanualに設定する必要があります。一時停止するように設定すると、どのように再生を開始しますか? –

+0

@AlexanderZwitbaum:統合されたボタンとは無関係の、他のイベントに基づいて 'Play'メソッドを呼び出すことによって? –

1

私はコメントすることはできません以下を参照してください。

//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); 

スクラブチップをお寄せいただきありがとうございます。

関連する問題