当网页视频进入全屏模式时,切换Webview2到全屏模式。

3
我有一个网页,基本上是一个带有自定义控件的视频,并且已经放在Webview2中。当我尝试使用页面上的全屏控件时,它就不会进入全屏模式。由于这是一个全新的Webview2和项目,我没有对代码进行任何更改。
有人知道我该怎么做吗?

1
分享你的代码,这样更容易理解。 - Maytham Fahmi
2个回答

5

当视频进入全屏模式时,它将覆盖WebView控件的表面,并引发一个事件来让您知道全屏模式已更改,然后由您决定要做什么。如果您有一个设置为Dock=Fill(填充)以填满窗体的WebView控件,则只需在视频进入全屏模式时处理该事件,然后使您的窗体全屏即可。

正如其他答案中也提到的,当页面中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;
        }
    }
}

如果您浏览YouTube视频,并单击视频的全屏按钮,则表单和视频将全屏显示。 确保将“Load”事件处理程序附加到“Form1_Load”。使用代码非常简单@Redstone145。 - Reza Aghaei
好的,在进一步查看后,webView 必须停靠在窗体上。这很痛苦,因为如果它没有停靠在窗体上,则只有窗体变成全屏模式,如果我将其停靠到其他任何东西上,即使将其停靠到窗体上,它仍然只会使窗体本身全屏,而不是 webView 本身。但到目前为止,感谢你的帮助,你给出的是唯一能产生结果的东西。 - Redstone145
当视频进入全屏模式时,实际上它只是填充了WebView表面。如果您希望它填满整个表单,那么基本上意味着WebView应该填满您的表单(Dock = Fill)。如果您有一个表单,其中WebView是唯一的子项,则很容易,在设计模式下为WebView设置Dock = Fill。但是,如果WebView不是唯一的子项,则需要一些自定义逻辑来隐藏其余控件,然后将WebView停靠以填充(进入全屏模式时),并在返回正常模式时撤消这些操作。 - Reza Aghaei
顺便说一下,你看起来是这个网站的新贡献者,欢迎!你可能想要参观一下[tour],看看如何进行点赞和采纳,以防你不知道 :) - Reza Aghaei
好的,谢谢。会进行一些定制,对于是否新手,是和否都有。我已经在这里看了一段时间的帖子,但是账户是新的。 - Redstone145
显示剩余2条评论

1
当WebView2中的内容变为“全屏”时,实际上只填充了WebView2的区域,然后分派CoreWebView2.ContainsFullscreenElementChanged事件。由主机应用程序获取该事件并更改WebView2控件的大小以填充屏幕或填充主机应用程序窗口或适用于该应用程序的任何内容。您可以在ContainsFullscreenElementChanged事件文档和示例代码中了解更多信息。

我添加了一个C#示例。 - Reza Aghaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接