2009-08-28 17 views
16

Ho un'applicazione WPF con un MediaElement che uso per eseguire un video. Non voglio che il video riproduca automaticamente quando caricato, quindi imposto il LoadedBehavior su Manual.Mostra il primo frame del video in WPF MediaElement

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

Tuttavia; Voglio che l'elemento mostri il primo fotogramma del video quando caricato. C'è qualche modo magico per farlo?

risposta

21

È inoltre necessario

ScrubbingEnabled="True" 

Quindi impostare un evento su Load

Loaded="Video1_Loaded" 

Nel metodo Video1_Load aggiungere il seguente:

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

Nessuno dei contenuti video è reso prima il metodo di gioco è chiamato. Quindi, anche se si imposta la posizione oltre il primo fotogramma non si ottiene alcun dato di rendering.

Penso che la proprietà MediaElement.ScrubbingEnabled sia la chiave.

Ottiene o imposta un valore che indica se il MediaElement aggiornerà fotogrammi per cercare operazioni mentre pausa. Questa è una proprietà di dipendenza.

Ho provato lo stesso approccio senza ScrubbingEnabled ma ho trovato che il primo fotogramma non veniva visualizzato. Non sono sicuro se sia solo l'hardware che sto usando per questo. L'altro elemento da ricordare è che il modo in cui funziona MediaElement, una volta chiamato Play(), potrebbe non essere effettivamente Pausa() sul primo fotogramma esattamente, quindi potresti voler ridurre il volume sul flusso prima di chiamare Riproduci e resettare dopo aver chiamato Pausa.

+1

Thx - funziona! Devo dire che non mi sento a mio agio con l'attivazione di Play() Pause(). Ho visto qualcun altro suggerirlo, ma ho trovato l'approccio un po '"hacky". Ma se questo è l'unico modo, credo che dovremo conviverci. ScrubbingEnabled è una bella proprietà, ma non sembra avere nulla a che fare con la visualizzazione del primo frame video all'avvio. – stiank81

8

Non è necessario creare un evento, vedere la seguente

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

non puoi controllare MediaElement con play, stop ... Quindi devi caricare LoadedBehavior su manual. se lo imposti per mettere in pausa come inizieresti a suonare? –

+0

@AlexanderZwitbaum: chiamando il metodo 'Play' basato su qualche altro evento, non correlato ai pulsanti integrati? –

1

non posso commentare, ecco la mia risposta: scrub indica l'aggiornamento l'immagine di rendering quando il MediaElement è in pausa.

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

Grazie per la punta di lavaggio!

Problemi correlati