【发布时间】:2017-09-17 01:17:53
【问题描述】:
我目前正在开发一个 CefSharp 项目,并且我目前正在努力让 HTML5 视频在我的应用程序中全屏打开。
我已经在互联网上搜索了有关此类事件如何运作的答案,但我还不太了解。
到目前为止,我的 winforms 项目已经完成:
public partial class Form1 : Form
{
public ChromiumWebBrowser chromeBrowser;
public Form1()
{
InitializeComponent();
InitializeChromium();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void InitializeChromium()
{
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser("http://youtube.com/");
this.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Cef.Shutdown();
}
}
但每次我加载 youtube 视频(或来自不同网站的视频)并点击“全屏”按钮时,视频只会填满应用程序,而不是整个监视器屏幕。我想这是因为我还没有从 IDisplayHandler 接口实现 OnFullscreenModeChange 方法。
在我寻找答案的过程中,我发现我可以使用一种方法来重载 CefSharp 的 IDisplayHandler.OnFullscreenModeChange 方法,如下所示:
class DisplayHandler : IDisplayHandler
{
...
void IDisplayHandler.OnFullscreenModeChange(IWebBrowser browserControl, IBrowser browser, bool fullscreen)
{
var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
chromiumWebBrowser.InvokeOnUiThreadIfRequired(() =>
{
if (fullscreen)
{
parent = chromiumWebBrowser.Parent;
parent.Controls.Remove(chromiumWebBrowser);
fullScreenForm = new Form();
fullScreenForm.FormBorderStyle = FormBorderStyle.None;
fullScreenForm.WindowState = FormWindowState.Maximized;
fullScreenForm.Controls.Add(chromiumWebBrowser);
fullScreenForm.ShowDialog(parent.FindForm());
}
else
{
fullScreenForm.Controls.Remove(chromiumWebBrowser);
parent.Controls.Add(chromiumWebBrowser);
fullScreenForm.Close();
fullScreenForm.Dispose();
fullScreenForm = null;
}
});
}
...
}
所以我的问题是:如何将此重载添加到我的 ChromiumWebBrowser 控件?
【问题讨论】:
标签: c# html video fullscreen cefsharp