2010-03-03 85 views
0

我有一個MediaElement,但MediaElement的屬性「位置」更改時如何調用函數?WPF mediaelement

位置不是DependencyProperty。

+0

看到http://stackoverflow.com/questions/869761/wpf-implementing-a-mediaplayer-audio-video-seeker一個良好的開端 – kenwarner 2010-03-03 01:42:36

回答

0

所以我只是想實現下面的視頻播放滑塊......但位置屬性不是依賴項屬性:■

2

可以使用DispatchTimer。本文提供了一些有關如何實現此功能的良好洞察。 MediaElement and More with WPF

這是我從一個項目中取得的一些示例代碼。它使用滑塊控件顯示視頻的位置,並允許用戶更改位置。

我也是一個新手,所以它可能有一些是錯誤的(隨意評論問題的評論部分:)。

private DispatcherTimer mTimer; 
private bool mIsDragging = false; 
private bool mTick = false; 
private void UserControl_Loaded(object sender, RoutedEventArgs e) 
{ 
    medPlayer.Play(); 
    medPlayer.Stop(); 
    mTimer = new DispatcherTimer(); 
    mTimer.Interval = TimeSpan.FromMilliseconds(100); 
    mTimer.Tick += new EventHandler(mTimer_Tick); 
    mTimer.Start(); 
} 
void mTimer_Tick(object sender, EventArgs e) 
{ 
    if (!mIsDragging) 
    { 
     try 
     { 
      mTick = true; 
      sldPosition.Value = medPlayer.Position.TotalMilliseconds; 
     } 
     finally 
     { 
      mTick = false; 
     } 
    } 
} 
private void sldPosition_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) 
{ 
    mIsDragging = true; 
    medPlayer.Pause(); 
} 
private void sldPosition_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e) 
{ 
    mIsDragging = false; 
    if (chkPlay.IsChecked.Value) 
     medPlayer.Play(); 
} 
private void sldPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
    var pos = TimeSpan.FromMilliseconds(e.NewValue); 
    lblPosition.Content = string.Format("{0:00}:{1:00}", pos.Minutes, pos.Seconds); 
    if (!mTick) 
    { 
     medPlayer.Position = TimeSpan.FromMilliseconds(sldPosition.Value); 
     if (medPlayer.Position == medPlayer.NaturalDuration.TimeSpan) 
     { 
      chkPlay.IsChecked = false; 
      medPlayer.Stop(); 
     } 
    } 
}