对话窗口中的WPF WebView第一次没有显示内容

时间:2018-11-17 02:31:14

标签: wpf xaml webview

我有一个WPF应用程序在Win10桌面上运行,该对话框使用对话框窗口中的新控件(Microsoft.Toolkit.Wpf.UI.Controls.WebView v5.0.0.0)WebView。第一次创建此对话框窗口时,WebView导航成功完成,但是大多数时候WebView顽固地继续显示空白页面。

如果我最小化对话窗口的第一个实例并还原它,则内容将立即呈现。如果我关闭该窗口实例并创建一个新实例,则控件通常会按预期方式呈现。

在导航完成时将代码中的WebView.Visibility更改为Collapsed,然后返回到Visible并不能解决空白页面。

有人看到过这种行为吗?是否有人有办法激发WebView进行实际渲染?

从理论上讲,新的WebView是比恢复到旧的WebBrowser更好的体系结构选择,因此我不愿意沿着那条路走。


其他详细信息

  • Windows 10桌面x64,面向.NET 4.6.2,WPF4.x。 WebView实例是在Source内的XAML中定义的(没有UserControl绑定)。
  • UserControl嵌入在XAML中定义的窗口中,该窗口仅包含根级别Grid来包含UserControl
  • 该窗口通过ShowDialog()显示。
  • 源导航在由TabControl当前选择控制的后面代码中执行。
  • WebView项模板中未定义TabControl(这样做通常会在选项卡选择更改时引发异常)。它位于TabControl的同级容器中。
  • NavigationCompleted事件报告成功。

1 个答案:

答案 0 :(得分:0)

我发现,尝试最小化然后还原代码中的包含窗口并不能解决问题,尽管在用户操作时最小化并还原了它。无效的控件布局或视觉或安排无效。在代码中最大化和还原窗口确实可以,但是在视觉上很烦人,但这使我找到了两个合理的解决方法:


在XAML中将WebView.Visibility配置为Collapsed,并且可以:

  • 处理UserControl.Loaded事件,并将可见性设置为Visible;或
  • 处理WebView.NavigationStarting事件并将其设置为Visible

最简单的方法是即使开始崩溃也不会造成不可接受的视觉干扰。通过Loaded事件提早进入会有所帮助。开始Hidden无效。


在XAML中将WebView.Visibility配置为Visible,在WebView.NavigationStarted中处理UserControl事件,如果这是此过程中调用的处理程序第一次执行此操作,这样会导致控件调整大小,然后恢复原始大小:

var height = Height;
Height = 0;
Application.Current.Dispatcher.BeginInvoke(
    (Action)(() => { Height = height; }), 
    DispatcherPriority.Input
);

似乎需要分派值恢复(尽管也许在两者之间调用InvalidateLayout()之类的东西就足够了。)