WPF MediaElement.Position属性
Posted 天马3798
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于WPF MediaElement.Position属性的主要内容,如果未能解决你的问题,请参考以下文章