MAUI MediaElement暂停时Position属性不更新问题求助
解决MAUI MediaElement暂停时拖拽进度条Position不更新的问题
针对你遇到的暂停状态下拖拽进度条后,MediaElement的Position属性未实时更新的问题,不需要自定义播放控件,用以下方法可以完美解决:
核心思路
默认播放控件拖拽进度条会触发Seek操作,即使视频处于暂停状态,SeekCompleted事件也会在拖拽完成后触发,此时MediaElement的Position已经同步了拖拽后的位置。我们只需要监听这个事件,实时保存最新的位置,点击按钮时直接使用保存的位置值即可。
代码实现
- 注册并监听
PositionChanged和SeekCompleted事件,实时保存当前位置:
private TimeSpan _currentPosition; public MainPage() { InitializeComponent(); MediaElement.PositionChanged += MediaElement_PositionChanged; MediaElement.SeekCompleted += MediaElement_SeekCompleted; } private void MediaElement_PositionChanged(object sender, MediaElementPositionChangedEventArgs args) { Debug.WriteLine($"Position:{args.Position}"); // 播放过程中实时更新位置 _currentPosition = args.Position; } private void MediaElement_SeekCompleted(object sender, EventArgs e) { // 拖拽进度条完成后更新位置(暂停状态下也会触发) _currentPosition = MediaElement.Position; }
- 点击按钮时直接使用保存的
_currentPosition:
private void MarkStartButton_OnClicked(object sender, EventArgs e) { _startPoint = _currentPosition; UpdateTimePoint(); }
为什么这个方法更可靠
- 完全保留默认播放控件,不需要自定义任何UI组件
- 避免了
Play()+延迟的不可靠性(不同设备延迟时间可能不同,极端情况延迟不够依然取不到正确位置) - 无论是播放中还是暂停拖拽后,都能实时获取到准确的当前位置
内容的提问来源于stack exchange,提问作者fairjm
相关产品推荐
相关产品推荐

