2009-03-04 10 views
1

cela me rend assez fou. J'essaie d'obtenir un fichier WMV à autoreverse après qu'il a fini de jouer, mais cela ne fonctionne pas. J'ai essayé de définir Storyboard autoreverse sur true, mais cela génère une erreur indiquant queImpossible d'obtenir MediaElement Storyboard pour autoreverse

"Les horloges avec CanSlip ne peuvent pas avoir de parents ou d'ancêtres avec AutoReverse, AccelerationRatio ou DecelerationRatio." Est-ce parce que je n'utilise pas d'animation mais une vidéo? Comment puis-je réaliser la même chose? La vidéo que j'ai fonctionne, à la fois jouer et faire une pause et reprendre. Mais après c'est fini, ça s'arrête.

J'ai trois storyboards tous ensemble, un qui est la vidéo elle-même. Et deux où il y a une animation qui fait disparaître un rectangle blanc juste au moment où la vidéo joue et fait une pause.

Le code ressemble à ceci:

public partial class Window1 
{ 

    public Storyboard RectangleFadeA; 
    public Storyboard RectangleFadeBackA; 
    public Storyboard VideoA; 

    bool isPlaying; 
    bool isPaused; 

    public Window1() 
    { 
     this.InitializeComponent(); 

     // Insert code required on object creation below this point. 
     RectangleFadeA = (Storyboard)TryFindResource("RectangleFadeA"); 
     RectangleFadeBackA = (Storyboard)TryFindResource("RectangleFadeBackA"); 
     VideoA = (Storyboard)TryFindResource("GTTV_promo_wmv");   

     isPlaying = false; 
     isPaused = false; 
    } 


    private void rectangle_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     if (!isPlaying) 
     { 
      if (!isPaused) 
      { 

       if (RectangleFadeA != null) 
        RectangleFadeA.Begin(this, true); 

       if (VideoA != null) 
        VideoA.Begin(this, true); 

       isPlaying = true; 
       return; 

      } 
      if (isPaused) 
      { 
       if (RectangleFadeA != null) 
        RectangleFadeA.Begin(this, true); 
       if (VideoA != null) 
        VideoA.Resume(this); 
       isPaused = false; 
       isPlaying = true; 
       return; 
      } 
     } 

     if (isPlaying) 
     { 
      if (RectangleFadeBackA != null) 
       RectangleFadeBackA.Begin(this, true); 
      VideoA.Pause(this); 
      isPlaying = false; 
      isPaused = true; 
      return; 

     } 



    } 

} 

Répondre

1

Je viens de trouver la solution sans beaucoup de code. Tout d'abord, je mets la vidéo (MediaTimeLine) à repeatbehaviour = forever. Puis-je ajouter un gestionnaire d'événements à l'MediaElement à "MediaEnded"

Et le code C# ressemble à ceci:

private void GTTV_promo_wmv_MediaEnded(object sender, RoutedEventArgs e) 
    { 
     RectangleFadeBackA.Begin(this, true); 
     VideoA.Pause(this); 
     isPaused = true; 
     isPlaying = false; 
     return; 

    } 

Ainsi, le code complet de C# afin ressemble beaucoup à ceci:

public partial class Window1 
{ 
    public Storyboard RectangleFadeA; 
    public Storyboard RectangleFadeBackA; 

    public Storyboard VideoA; 

    bool isPlaying; 
    bool isPaused; 


    public Window1() 
    { 
     this.InitializeComponent(); 

     // Insert code required on object creation below this point. 
     RectangleFadeA = (Storyboard)TryFindResource("RectangleFadeA"); 
     RectangleFadeBackA = (Storyboard)TryFindResource("RectangleFadeBackA"); 
     VideoA = (Storyboard)TryFindResource("GTTV_promo_wmv"); 
     isPlaying = false; 
     isPaused = false; 

    } 

    private void rectangle_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     if (!isPlaying) 
     { 
      if (!isPaused) 
      { 

       if (RectangleFadeA != null) 
        RectangleFadeA.Begin(this, true); 

       if (VideoA != null) 
        VideoA.Begin(this, true); 

       isPlaying = true; 
       return; 

      } 
      if (isPaused) 
      { 
       if (RectangleFadeA != null) 
        RectangleFadeA.Begin(this, true); 
       if (VideoA != null) 
        VideoA.Resume(this); 
       isPaused = false; 
       isPlaying = true; 
       return; 
      } 

     } 

     if (isPlaying) 
     { 
      if (RectangleFadeBackA != null) 
       RectangleFadeBackA.Begin(this, true); 
      VideoA.Pause(this); 
      isPlaying = false; 
      isPaused = true; 
      return; 

     } 

    } 

    private void ButtonWebcam_Click(object sender, RoutedEventArgs e) 
    { 
     OpeningWindows.Window2 Window2 = new OpeningWindows.Window2(); 
     Window2.ShowDialog(); 
    } 

    private void GTTV_promo_wmv_MediaEnded(object sender, RoutedEventArgs e) 
    { 
     RectangleFadeBackA.Begin(this, true); 
     VideoA.Pause(this); 
     isPaused = true; 
     isPlaying = false; 
     return; 

    } 
} 
Questions connexes