使用标签和滑块在WPF上链接媒体元素

时间:2013-11-26 09:20:48

标签: c# wpf mediaelement

我已将导入按钮与媒体元素相关联,因此我可以播放该歌曲。

            // Create OpenFileDialog 
        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();



        // Set filter for file extension and default file extension 
        dlg.DefaultExt = ".txt";
        dlg.Filter = "WAV Files (*.wav)|*.wav|MP3 Files (*.mp3)|*.mp3|MP4 Files (*.mp4)|*.mp4|WMA Files (*.wma)|*.wma|SWA (*.swa)|*.swa";


        // Display OpenFileDialog by calling ShowDialog method 
        Nullable<bool> result = dlg.ShowDialog();


        // Get the selected file name and display in a TextBox 
        if (result == true)
        {
            // Open document 
            meMedia1.Source = new Uri(dlg.FileName);
            meMedia1.Play();
            //txtFileLocation.Text = filename;

现在,声音播放但我想要做的是链接一个滑块,这样他们就可以跳过一些歌曲,也可以跳过滑块上方的标签,以便它可以读出歌曲的长度。这就是我的应用程序现在看起来如何给你一个想法。

http://i.stack.imgur.com/sVtrd.png

谢谢。

编辑:寻求改变歌曲位置,但我仍然无法手动移动到歌曲的时间,例如,如果我跳到歌曲的中间,让歌曲完成我的滑块仍将是在中间,我希望它在最后。

1 个答案:

答案 0 :(得分:0)

一种方法是创建一个DispatcherTimer,每隔200-800ms(取决于您对更新速度的偏好),将滑块与播放器的当前位置同步。该代码可能与此类似:

// In the class members area
private DispatcherTimer _timer = null;

// In your constructor/loaded method
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromMilliseconds(500);
_timer.Tick += _timer_tick;

// Timer's tick method
void _timer_tick(object sender, EventArgs e)
{
  // Convert duration to an integer percentage based on current position of
  //   playback and update the slider control
  TimeSpan ts = meMedia1.NaturalDuration.TimeSpan;
  int percent = int( meMedia1.Position / ts.Seconds * 100 );
  mySliderControl.Value = percent;
}

请注意,这假设您有一个Slider,其Min为0且Max为100.您可以将其提升到0-1000(并相应地更改数学)以获得更精细的粒度。这也不允许滑块将用户交互推送回播放器,但是让您了解一种相反的方法。您可以向Slider添加事件处理程序,以便在用户开始交互时,此_timer停止(_timer.Stop()),因此更新媒体位置会停止更新滑块,而是开始执行滑块 - &gt ;媒体位置更新。然后当用户放开滑块时,重新打开_timer_timer.Start())。