我有一个WPF应用程序在Win10桌面上运行,该对话框使用对话框窗口中的新控件(Microsoft.Toolkit.Wpf.UI.Controls.WebView v5.0.0.0)WebView
。第一次创建此对话框窗口时,WebView
导航成功完成,但是大多数时候WebView
顽固地继续显示空白页面。
如果我最小化对话窗口的第一个实例并还原它,则内容将立即呈现。如果我关闭该窗口实例并创建一个新实例,则控件通常会按预期方式呈现。
在导航完成时将代码中的WebView.Visibility
更改为Collapsed
,然后返回到Visible
并不能解决空白页面。
有人看到过这种行为吗?是否有人有办法激发WebView
进行实际渲染?
从理论上讲,新的WebView
是比恢复到旧的WebBrowser
更好的体系结构选择,因此我不愿意沿着那条路走。
其他详细信息
WebView
实例是在Source
内的XAML中定义的(没有UserControl
绑定)。UserControl
嵌入在XAML中定义的窗口中,该窗口仅包含根级别Grid
来包含UserControl
。ShowDialog()
显示。TabControl
当前选择控制的后面代码中执行。WebView
项模板中未定义TabControl
(这样做通常会在选项卡选择更改时引发异常)。它位于TabControl
的同级容器中。NavigationCompleted
事件报告成功。答案 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()
之类的东西就足够了。)