当页面视频全屏时将 Webview2 切换为全屏

Red*_*145 3 .net c# winforms webview2

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

有人知道我该怎么做吗?

Rez*_*aei 5

当视频进入全屏模式时,它将覆盖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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)