2

我有一个网页,它基本上是一个带有自定义控件的视频,该控件已放入 webview2 中,当我尝试使用该页面具有的全屏控件时,它不会进入全屏状态。我没有对代码进行任何更改,因为它是一个全新的 webview2 和项目。

有谁知道我该怎么做?

4

2 回答 2

2

当视频进入全屏模式时,它将覆盖WebView控制表面并引发一个事件,让您知道全屏模式已更改,然后由您决定做什么。如果您有一个WebVeiw设置为 Dock = Fill 的控件来填充表单,那么当视频进入全屏模式时处理该事件并让表单全屏显示就足够了。

正如另一个答案中提到的那样,当页面中 HTML 元素的全屏状态发生更改时,将引发CoreWebView2.ContainsFullScreenElementChanged 。您可以处理该事件,然后检查CoreWebView2.ContainsFullScreenElement属性,该属性指示 WebView2 是否包含全屏 HTML 元素并基于此更改表单大小/模式。

例子

在此示例中,我在表单中添加了一个FullScreen属性,并在我的表单中处理了ContainsFullScreenElement全屏模式和正常模式之间的切换。

要使其正常工作,请确保您WebView在表单上有一个控件并将其设置DockFill,然后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;
        }
    }
}
于 2021-01-22T19:00:54.727 回答
1

当 中的内容WebView2变为“全屏”时,它实际上只填充 的区域,WebView2然后调度CoreWebView2.ContainsFullscreenElementChanged 事件。由宿主应用程序获取该事件并更改WebView2控件的大小以填充屏幕或填充宿主应用程序窗口或适合该应用程序的任何内容。ContainsFullscreenElementChanged您可以在事件文档中阅读有关此内容的更多信息并查看示例代码

于 2021-01-20T20:48:49.787 回答