C# WPF web浏览器UI元素刷新

C# WPF web浏览器UI元素刷新,c#,wpf,webbrowser-control,C#,Wpf,Webbrowser Control,在C#WPF中,我创建了一个自定义UI元素,看起来像一个窗口,这样我就可以在WPF应用程序中拥有一个迷你桌面环境。这个“WindowControl”类具有最大化、最小化、关闭、缩放、转换等功能 这个窗口UI包含一个画布,其他嵌入的UI元素都在画布上。例如,我可以将树视图嵌入WindowControl的画布中,并在屏幕上移动它,就像在操作系统中打开Windows资源管理器一样 除了网络浏览器,其他一切都正常工作。当我将内置的web浏览器控件放入WindowControl类的画布时,它不会刷新。我不

在C#WPF中,我创建了一个自定义UI元素,看起来像一个窗口,这样我就可以在WPF应用程序中拥有一个迷你桌面环境。这个“WindowControl”类具有最大化、最小化、关闭、缩放、转换等功能

这个窗口UI包含一个画布,其他嵌入的UI元素都在画布上。例如,我可以将树视图嵌入WindowControl的画布中,并在屏幕上移动它,就像在操作系统中打开Windows资源管理器一样

除了网络浏览器,其他一切都正常工作。当我将内置的web浏览器控件放入WindowControl类的画布时,它不会刷新。我不是说刷新浏览器的url。我的意思是刷新UI元素本身。当我在屏幕上移动WindowControl类(带有嵌入式web浏览器)时,web浏览器会将屏幕工件到处留下

实际问题是:如何强制C#WPF中的内置web浏览器UI元素重新绘制自身,以便在调整大小/转换时不会留下瑕疵

我会包括我的代码。。。但是单是WindowControl类就有近1000行,这在这个论坛上是不愉快的

到目前为止,我已尝试了以下方法(均无效):


我会尝试强制更新(未测试):

  • 通过获取
    WebBrowser.Document的
    HWND

  • 通过以下方式调用
    UpdateWindow


  • 对于WinForms:

    错误无法转换…'“PInvoke.NativeMethods.IOleWindow”中的System.Windows.Forms.HtmlDocument”

    解决方案

    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;
        }
    

    如果单独使用
    UpdateWindow
    没有帮助,你可以尝试在它前面加上
    invalidateBu立(hwnd,IntPtr.Zero,false)
    @user2984377,你也可以尝试
    重画窗口(hwnd,IntPtr.Zero,IntPtr.Zero,RDW|ERASE | RDW| INTERNALPAINT | RDW| RDW|RDW| RDW|ERASENOW | RDW | RDW | RDW | UPDATENOW |所有孩子
    )作为
    的彻底替代
    +
    UpdateWindow
    。看看什么样的标志组合能给你最好的结果。
    IntPtr hwnd;
    ((IOleWindow)_webBrowser.Document).GetWindow(out hwnd);
    
    UpdateWindow(hwnd);
    
    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;
        }