WPF网页浏览器UI元素刷新
本文关键字:元素 刷新 UI 浏览器 网页 网页浏览 WPF | 更新日期: 2023-09-27 18:07:51
在c# WPF中,我创建了一个自定义UI元素,看起来像一个窗口,这样我就可以在我的WPF应用程序中拥有一个迷你桌面环境。这个"WindowControl"类有最大化、最小化、关闭、缩放、转换等功能。
这个窗口UI包含一个画布,这是其他嵌入UI元素的位置。例如,我可以在我的WindowControl画布中嵌入一个TreeView,并在屏幕上移动它,就像你在操作系统中打开Windows资源管理器一样。
一切都在工作,除了web浏览器。当我把内置的web浏览器控件放入我的WindowControl类的画布时,它不会刷新。我不是说刷新浏览器的url。我是说刷新UI元素本身。当我在屏幕上移动我的WindowControl类(带有嵌入式web浏览器)时,web浏览器在屏幕上到处留下了屏幕工件。
实际问题是:如何强制c# WPF中内置的web浏览器UI元素重新绘制自身,以便在调整大小/翻译时不会留下工件?
我将包含我的代码…但是,仅WindowControl类就有近1000行,这在这个论坛上是不愉快的。
到目前为止,我已经尝试了以下操作(没有成功):webBrowser.Measure();
webBrowser.Arrange();
webBrowser.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() => { }));
webBrowser.Width = XX;
webBrowser.Height = XX;
webBrowser.ActualWidth = XX;
webBrowser.ActualHeight = XX;
// As sugguested by Noseratio
IntPtr hwnd;
((IOleWindow)webBrowser.Document).GetWindow(out hwnd);
UpdateWindow(hwnd);
我会尝试使用UpdateWindow
(未经测试)强制更新:
-
通过IOleWindow获取
WebBrowser.Document
的HWND
IntPtr hwnd; ((IOleWindow)_webBrowser.Document).GetWindow(out hwnd);
-
通过p/invoke:
调用UpdateWindow
UpdateWindow(hwnd);
WinForms:
错误不能转换…"System.Windows.Forms。HtmlDocument' in ' pinvoke . native emethods . iolewindow '
<<p> 解决方案/strong>public IntPtr GetHandle()
{
HtmlDocument doc = Document;
if (doc == null || doc.DomDocument == null) return IntPtr.Zero;
IntPtr hwnd;
((NativeMethods.IOleWindow)(doc.DomDocument)).GetWindow(out hwnd);
return hwnd;
}