折叠时如何使用 ChromiumWebBrowser
How can I use a ChromiumWebBrowser when Collapsed
我有一个 ChromiumWebBrowser
控件,Visibility
为 Collapsed
。在可见性设置为 Visible
之前,页面未加载并且许多调用失败:
System.Exception
: The browser has not been initialized. Load
can only be called after the underlying CEF browser is initialized (CefLifeSpanHandler::OnAfterCreated
).
如何在 Visibility
为 Collapsed
时加载页面?
创建 ChromiumWebBrowser
的子类,如 Render problems when Initial Visibility Collapsed 中所述。要解决 AbstractRenderHandler.OnPaint
中的 NullReferenceException
,您需要确保已创建可视化树(通过调用 ApplyTemplate
)。
示例:
internal sealed class CollapsableChromiumWebBrowser : ChromiumWebBrowser
{
public CollapsableChromiumWebBrowser()
{
this.Loaded += this.CollapsableChromiumWebBrowser_Loaded;
}
private void CollapsableChromiumWebBrowser_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
// Avoid loading CEF in designer
if (DesignerProperties.GetIsInDesignMode(this))
{
return;
}
// Avoid NRE in AbstractRenderHandler.OnPaint
ApplyTemplate();
// https://github.com/cefsharp/CefSharp/issues/1412
CreateOffscreenBrowser(new Size(400, 400));
}
}
我有一个 ChromiumWebBrowser
控件,Visibility
为 Collapsed
。在可见性设置为 Visible
之前,页面未加载并且许多调用失败:
System.Exception
: The browser has not been initialized.Load
can only be called after the underlying CEF browser is initialized (CefLifeSpanHandler::OnAfterCreated
).
如何在 Visibility
为 Collapsed
时加载页面?
创建 ChromiumWebBrowser
的子类,如 Render problems when Initial Visibility Collapsed 中所述。要解决 AbstractRenderHandler.OnPaint
中的 NullReferenceException
,您需要确保已创建可视化树(通过调用 ApplyTemplate
)。
示例:
internal sealed class CollapsableChromiumWebBrowser : ChromiumWebBrowser
{
public CollapsableChromiumWebBrowser()
{
this.Loaded += this.CollapsableChromiumWebBrowser_Loaded;
}
private void CollapsableChromiumWebBrowser_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
// Avoid loading CEF in designer
if (DesignerProperties.GetIsInDesignMode(this))
{
return;
}
// Avoid NRE in AbstractRenderHandler.OnPaint
ApplyTemplate();
// https://github.com/cefsharp/CefSharp/issues/1412
CreateOffscreenBrowser(new Size(400, 400));
}
}