WinRT MediaElement:检测从全屏到正常的变化,当 IsFullWindow 为 true 且 AreTr

本文关键字:变化 IsFullWindow AreTr true 检测 MediaElement WinRT | 更新日期: 2023-09-27 18:30:38

上下文: WinRT, Universal Apps, XAML, C#

我正在创建一个视频播放器应用程序,其中的要求之一是视频仅全屏播放,当视频从全屏返回时,应停止视频并将用户带到摘要页面。目前我正在使用MediaElement.IsFullWindow和MediaElement.AreTransportControlsEnabled,以便全屏播放视频,并且效果很好,当视频结束时,我抓住MediaEnded事件并将用户带回摘要页面,将IsFullWindow设置为false,将AreTransportControlsEnabled设置为false。

唯一的问题是传输控件有一个全屏按钮,可将用户带回非全屏布局,并且视频继续播放。

在大多数应用程序上,

这会很棒,但是在这个应用程序上,我需要在视频发生时停止视频。

不幸的是,发生这种情况时,IsFullWindow 未设置为 false,不会触发 MediaElement 的 SizeChanged 事件,并且似乎没有其他通知表明用户已决定退出全屏模式。

所以我陷入了无法确定视频是否真正全屏播放的情况。

如果我暂停视频并且用户再次播放它,因为IsFullWindow是真的,它将返回到全屏,如果我让视频播放到最后,一切正常,用户进入摘要页面。

有人对我如何能够检测到此更改以停止视频有任何建议吗?

WinRT MediaElement:检测从全屏到正常的变化,当 IsFullWindow 为 true 且 AreTr

另一种解决方案是不使用媒体元素提供的传输控件并创建自己的自定义媒体控件。

请参阅此 MSDN 链接,该链接说明如何创建自定义媒体传输控件

当更改时,IsFullWindow 状态会触发 SizeChanged of Window.Current 而不是 MediaElement。您只需要附加到此事件

Window.Current.SizeChanged += this.OnWindowSizeChanged;

并检查 MediaElement 的 IsFullWindow 何时触发。

private void OnWindowSizeChanged(object sender, WindowSizeChangedEventArgs windowSizeChangedEventArgs)
{
    if (!this.mediaElement.IsFullWindow)
    {
    }
    else
    {
    }
}

我最终使用了Microsoft播放器框架,它为我提供了事件和属性来控制我需要的一切,而无需编写自己的代码并承担视频播放器控件资产的设计工作。

可以通过将 IFullWindow MediaElement 属性与"双向"模式绑定来解决此问题,并根据其在集:)的值进行操作

您可以使用每 100 毫秒调用一次的 DispatcherTimer ,检查 IsFullWindow 属性的状态,如果属性值发生更改,则触发事件或调用自己的函数。