2012-04-18 120 views
3

嘗試綁定滑塊到媒體元素的持續時間的最大值,並將滑塊的當前值綁定到媒體元素的位置,但由於某些原因它沒有。將MediaElement綁定到WPF中的滑塊位置

我希望滑塊在播放視頻時移動它的拇指。

<Slider x:Name="videoSlider" Value="{Binding ElementName=mp3MediaElement, Path=Position}" 
ValueChanged="videoSlider_ValueChanged" IsMoveToPointEnabled="True" 
Maximum="{Binding ElementName=mp3MediaElement, Path=NaturalDuration}" 
AllowDrop="True" DataContext="{Binding ElementName=mp3MediaElement}" /> 

回答

10

我沒有使用綁定.. 我也有類似的問題,使用定時器這個(我的代碼是在Silverlight通過其假設是對WPF相同):

第一方向(影片更新滑塊)

private TimeSpan TotalTime; 

private void MyMediaElement_MediaOpened(object sender, RoutedEventArgs e) 
     { 
      TotalTime = MyMediaElement.NaturalDuration.TimeSpan; 

      // Create a timer that will update the counters and the time slider 
      timerVideoTime = new DispatcherTimer(); 
      timerVideoTime.Interval = TimeSpan.FromSeconds(1); 
      timerVideoTime.Tick += new EventHandler(timer_Tick); 
      timerVideoTime.Start(); 
     } 

void timer_Tick(object sender, EventArgs e) 
     { 
      // Check if the movie finished calculate it's total time 
      if (MyMediaElement.NaturalDuration.TimeSpan.TotalSeconds > 0) 
      { 
       if (TotalTime.TotalSeconds > 0) 
       { 
        // Updating time slider 
        timeSlider.Value = MyMediaElement.Position.TotalSeconds/
             TotalTime.TotalSeconds; 
       } 
      } 
     } 

第二方向(用戶更新滑塊)
的形式構造函數或類似這樣的東西寫下面一行:

timeSlider.AddHandler(MouseLeftButtonUpEvent, 
         new MouseButtonEventHandler(timeSlider_MouseLeftButtonUp), 
         true); 

和事件處理程序是:

private void timeSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
     { 
      if (TotalTime.TotalSeconds > 0) 
      { 
       MyMediaElement.Position = TimeSpan.FromSeconds(timeSlider.Value * TotalTime.TotalSeconds); 
      } 
     } 
+0

好吧,它一直調用ValueChanged事件,當用戶單擊滑塊時使用它,因此它移動到媒體文件的位置。滑塊值正在改變,但它不反映在用戶界面:( – HomeMade 2012-04-18 14:05:54

+0

它開始工作,因爲我刪除了另一個邏輯:當用戶單擊滑塊時,它跳轉到那個位置。你能告訴我你是如何解決這個問題的嗎? – HomeMade 2012-04-18 14:32:09

+0

@HomeMade看看我編輯的 – 2012-04-18 14:42:44

3

兩個滑塊屬性值和最大值型雙。您正試圖將相應的值綁定到類型TimeSpanDuration的值,這就是爲什麼綁定系統不適用於您的情況。

您可能會嘗試寫一個轉換器,或綁定到NaturalDuration.TimeSpan.TotalSeconds屬性。

希望這會有所幫助。

順便說一句,如果你的一些綁定不起作用,你可能會檢查Visual Studio「輸出」窗口中的綁定錯誤。

+0

我使用了適當的格式。我還是不太瞭解轉換器,因爲我是初學者,謝謝。 – HomeMade 2012-04-18 14:43:05

0

我有同樣的問題,滑塊沒有更新的MediaElement的UI ..
我花了相當長的一段時間,試圖解決它,我不相信這將幫助別人。
但是爲了防止其他人遇到該問題,請注意媒體元素中有一個ScrubbingEnabled屬性,它允許MediaElement的UI根據位置自動查找正確的圖片。
當您處於暫停模式並嘗試拖動滑塊時非常有用。
只需在MediaElement的XAML中添加:ScrubbingEnabled="True"即可。