WPF MediaElement.Position屬性


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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM