2009-03-04 8 views
1

werden Dies treibt mich ziemlich verrückt. Ich versuche, eine WMV-Datei nach dem Abspielen automatisch wiederherzustellen, aber es funktioniert nicht. Ich habe versucht, Storyboard autoreverse auf true zu setzen, aber dies wirft einen Fehler auf, der besagt, dassMediaElement Storyboard kann nicht zu Autoreverse

"Uhren mit CanSlip keine Eltern oder Vorfahren mit AutoReverse, AccelerationRatio oder DecelerationRatio haben können."

Ist das, weil ich nicht Animation, sondern ein Video verwende? Wie kann ich dasselbe erreichen? Das Video, das ich habe, funktioniert, spielt und pausiert und setzt fort. Aber nachdem es fertig ist, hört es einfach auf.

Ich habe insgesamt drei Storyboards, eines davon ist das Video selbst. Und zwei, wo es eine Animation gibt, die ein weißes Rechteck ausblendet, gerade als das Video spielt und pausiert.

Der Code sieht wie folgt aus:

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; 

     } 



    } 

} 

Antwort

1

einfach die Lösung ohne viel Code gefunden. Zunächst habe ich das Video (MediaTimeLine) auf Wiederholungsverhalten = für immer festgelegt. Dann füge ich einen Event-Handler an die Media bei "MediaEnded"

Und der C# -Code sieht wie folgt aus:

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

    } 

die komplette C# -Code Also, so sieht weit wie folgt aus:

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; 

    } 
} 
Verwandte Themen