2009-08-28 10 views
16

J'ai une application WPF avec un MediaElement que j'utilise pour lancer une vidéo. Je ne veux pas que la vidéo soit jouée automatiquement une fois chargée, donc j'ai mis le LoadedBehavior au manuel.Afficher la première image de la vidéo dans WPF MediaElement

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

Cependant; Je veux que l'élément affiche la première image de la vidéo lorsqu'il est chargé. Y a-t-il un moyen magique de le faire?

Répondre

21

Vous devez également

ScrubbingEnabled="True" 

Ensuite, définissez un événement sur la charge

Loaded="Video1_Loaded" 

Dans la méthode Video1_Load ajouter ce qui suit:

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

Aucun contenu vidéo est rendue avant la méthode de jeu est appelée. Donc, même si vous définissez la position après la première image, vous ne recevrez aucune donnée. Je pense que la propriété MediaElement.ScrubbingEnabled est la clé.

Obtient ou définit une valeur qui indique si le MediaElement mettra à jour cadres pour opérations de recherche en fit une pause. C'est une propriété de dépendance.

J'ai essayé la même approche sans ScrubbingEnabled mais j'ai trouvé que la première image ne s'affichait pas. Je ne sais pas si c'est juste le matériel que j'utilise pour cela. L'autre élément à noter est que la façon dont le MediaElement fonctionne, une fois que vous appelez Play() vous ne pouvez pas réellement Pause() sur la première image exactement, donc vous pouvez réduire le volume sur le flux avant d'appeler Play et réinitialiser après avoir appelé Pause.

+1

Thx - cela fonctionne! Je dois dire que je ne suis pas tout à fait à l'aise avec le déclenchement de Play() Pause(). J'ai vu quelqu'un d'autre le suggérer aussi, mais j'ai trouvé l'approche un peu "hacky". Mais si c'est le seul moyen, je suppose que nous devrons vivre avec. ScrubbingEnabled est une belle propriété, mais ne semble pas avoir à voir avec la première image vidéo au démarrage. – stiank81

8

Vous ne devez pas créer un événement, voir ci-dessous

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

vous ne pouvez pas contrôler le MediaElement avec play, stop ... Donc vous devez définir LoadedBehavior en manuel. Si vous le mettez en pause, comment le commenceriez-vous à jouer? –

+0

@AlexanderZwitbaum: En appelant la méthode 'Play' basée sur un autre événement, sans rapport avec les boutons intégrés? –

1

Je ne peux pas commenter, alors voici ma réponse: récurage fait référence à la mise à jour l'image rendue lorsque le MediaElement est en pause.

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

Merci pour la pointe de récurage!

Questions connexes