c# - 当页面视频全屏时将 Webview2 切换到全屏

标签 c# .net winforms webview2

我有一个网页,基本上是一个带有自定义控件的视频,已放在 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;
        }
    }
}

关于c# - 当页面视频全屏时将 Webview2 切换到全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65806994/

相关文章:

c# - 异常堆栈跟踪

c# - 在c#中检测点击脱离控件

c# - LinQ 到实体 : Doing the opposite query

c# - KeyCode 和键盘布局和语言

c# - 在 C# 中删除非常大的对象

c# - LINQ 是否缓存计算值?

c# - 如何用 Unicode 转换特殊字符?

c# - 如何在F#中处理父子关系

c# - 在文本框上显示建议

winforms - 在 Windows 窗体中仅显示具有透明度的图像?