Position 屬性定義:獲取或設置媒體播放時間的當前進度位置。
// // 摘要: // 通過媒體播放時獲取或設置進度的當前位置。 // // 返回結果: // 媒體時自以來的。默認值為 00:00: 00. // // 異常: // T:System.InvalidOperationException: // System.Windows.Controls.MediaElement.Clock 屬性不是 null。 public TimeSpan Position { get; set; }
從定義中可以看出Position不是依賴屬性,不能使用雙向或頁面綁定等。
更多說明:
Dependency property identifier field: PositionProperty
使用此屬性可以設置為媒體內的特定位置。 此屬性是可設置的,而不使用特定的 MediaElement.Seek 方法。
如果媒體不支持查找操作(實時流處理媒體便屬於這種情況),則設置此屬性將對媒體播放沒有任何影響。 請在嘗試設置Position 之前檢查 CanSeek 的值。
如果 Position 是可設置的,則以下運行時值約束將適用:
-
如果 Position 設置為負值,則該值將恢復到值為 0:0:0 的 TimeSpan。
-
如果將 Position 設置為大於媒體的 NaturalDuration 的值,則 NaturalDuration 設置為 Position
未演示此屬性的 XAML 用法。 通常不應在 XAML 中設置此值,因為不能保證在加載媒體源之前可以定位該媒體(它可能是流處理媒體,因此無法定位)。 在引發 MediaOpened 后,檢查 CanSeek 的值。 如果該值為 true,則可以定位該媒體,然后可以在代碼中設置 Position。 然而,XAML 用法在技術上是可能的,可以使用屬性字符串以[days.]hours:minutes:seconds[.fractionalSeconds] 格式設置此用法。 有關時間跨度的 XAML 語法的進一步指導,請參見BufferingTime;將由同一種方法對 Position 進行分析。
需要自定義定時器或線程修改或顯示Position的位置
后台關鍵代碼:
DispatcherTimer timer = null; private void mediaElement_MediaOpened(object sender, RoutedEventArgs e) { sliderPosition.Maximum = mediaElement.NaturalDuration.TimeSpan.TotalSeconds; //媒體文件打開成功 timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += new EventHandler(timer_tick); timer.Start(); } private void timer_tick(object sender, EventArgs e) { sliderPosition.Value = mediaElement.Position.TotalSeconds; }