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

 

posted @ 2016-10-03 11:26  天马3798  阅读(2640)  评论(0编辑  收藏  举报