问题描述
我有一个网页,基本上是一个带有自定义控件的视频,该视频已放在 webview2 中,当我尝试使用该页面具有的全屏控件时,它不会进入全屏模式。 我没有对代码做任何更改,因为它是一个全新的 webview2 和项目。
有人知道我该怎么做吗?
解决方法
当视频进入全屏模式时,它会覆盖WebView
控件的表面并引发事件让您知道全屏模式已更改,然后由您决定要做什么做。如果您有一个设置为 Dock = Fill 的 WebVeiw
控件来填充表单,那么当视频进入全屏模式时,您就可以处理该事件,然后使表单全屏。
正如另一个答案中所提到的,当页面中 HTML 元素的全屏状态发生变化时,CoreWebView2.ContainsFullScreenElementChanged 将被引发。您可以处理该事件,然后检查 CoreWebView2.ContainsFullScreenElement 属性,该属性指示 WebView2 是否包含全屏 HTML 元素,并根据该元素更改表单大小/模式。
示例
在此示例中,我在表单中添加了 FullScreen
属性,还处理了 ContainsFullScreenElement
并在表单中在全屏和正常模式之间切换。
要使其工作,请确保您的表单上有一个 WebView
控件并将其 Dock
设置为 Fill
,然后处理表单的 Load
事件,例如这个:
private async void Form1_Load(object sender,EventArgs e)
{
webView21.Source = new Uri("https://youtube.com");
await webView21.EnsureCoreWebView2Async();
webView21.CoreWebView2.ContainsFullScreenElementChanged += (obj,args) =>
{
this.FullScreen = webView21.CoreWebView2.ContainsFullScreenElement;
};
}
private bool fullScreen = false;
[DefaultValue(false)]
public bool FullScreen
{
get { return fullScreen; }
set
{
fullScreen = value;
if (value)
{
this.WindowState = FormWindowState.Normal;
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
}
else
{
this.Activate();
this.FormBorderStyle = FormBorderStyle.Sizable;
this.WindowState = FormWindowState.Normal;
}
}
}
,
当 WebView2
中的内容变为“全屏”时,它实际上只填充 WebView2
的区域,然后分发 CoreWebView2.ContainsFullscreenElementChanged event。由宿主应用程序来获取该事件并更改 WebView2
控件的大小以填充屏幕或填充宿主应用程序窗口或适合该应用程序的任何内容。您可以在 ContainsFullscreenElementChanged
事件文档中阅读更多相关信息并查看 sample code。