在加载的窗口上播放mediaelement

时间:2014-05-28 18:45:42

标签: c# wpf xaml mediaelement

我有线问题,或者至少我找不到任何解决方案:) 在wpf应用程序中,我在加载窗口时发生了一个耗时的过程。在此期间,我使用包含MediaElement的边框覆盖我的窗口,其中LoadedBehavior设置为Play。耗时的流程在BackgroundWorker中运行,一旦完成,我将叠加层的属性Visible设置为Hidden

当我的应用程序启动时,叠加层会很好地显示,但不会显示MediaElement(这是一个动画gif)。但是,当我将叠加Visible属性设置为Visible之后,gif渲染得很好。

我的问题是,为什么第一次没有显示gif?此外,只有在BackgroundWorker结束后才会触发MediaOpened事件....

代码背后:

  public MainWindow()
  {
     InitializeComponent();
     //BackgroundWorker
     bckgndWorker = new BackgroundWorker();
     bckgndWorker.DoWork += new DoWorkEventHandler(bg_DoWork);
     bckgndWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
  }

  void bckgndWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
     this.ModalDialog.Visibility = System.Windows.Visibility.Hidden;
  }

  void bckgndWorker_DoWork(object sender, DoWorkEventArgs e)
  {
     //Do time consuming work
  }

  private void Window_Loaded(object sender, RoutedEventArgs e)
  {
     this.ModalDialog.Visibility = System.Windows.Visibility.Visible;
     this.bckgndWorke.RunWorkerAsync();     
  }

  private void myGif_MediaEnded(object sender, RoutedEventArgs e)
  {
     this.myGif.Position = new TimeSpan(0, 0, 1);
     this.myGif.Play();
  }

  private void myGif_MediaOpened(object sender, RoutedEventArgs e)
  {
     MessageBox.Show("test");
  }

  private void button1_Click(object sender, RoutedEventArgs e)
  {
     this.ModalDialog.Visibility = System.Windows.Visibility.Visible;
  }

XAML:

  <Grid>
     <Button Content="Button" Name="button1" Click="button1_Click" />
     <Border Background="#90000000" Name="ModalDialog">
        <MediaElement Name="myGif" UnloadedBehavior="Manual" LoadedBehavior="Play" 
                  Stretch="Fill" Source="ajax-loader.gif" MediaEnded="myGif_MediaEnded" Width="200" Height="130" MediaOpened="myGif_MediaOpened" />
     </Border>
  </Grid>    

1 个答案:

答案 0 :(得分:0)

我正在使用这个库成功地在WPF上播放gif文件:

http://wpfanimatedgif.codeplex.com/

我希望它也可以帮到你。