You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DevExpress FlyoutPanel修改高度后WebView2渲染异常求助

WebView2在DevExpress FlyoutPanel中调整高度后渲染异常的解决方法

我开发的WinForms应用中,使用DevExpress FlyoutPanel承载WebView2控件,代码如下:

public partial class Form1 : Form
{
    private Microsoft.Web.WebView2.WinForms.WebView2 mBrowser = new Microsoft.Web.WebView2.WinForms.WebView2();

    public Form1()
    {
        InitializeComponent();

        string webContent = "C:\\Users\\username\\AppData\\Local\\Temp\\CommonNavigation.html";

        mBrowser.AllowExternalDrop = true;
        mBrowser.CreationProperties = null;
        mBrowser.Dock = DockStyle.Fill;
        mBrowser.Name = "webView";
        mBrowser.TabIndex = 0;
        mBrowser.ZoomFactor = 1D;
        mBrowser.Source = new Uri(webContent);

        flyoutPanel1.OwnerControl = this;
        flyoutPanel1.Options.AnchorType = DevExpress.Utils.Win.PopupToolWindowAnchor.Manual;
        flyoutPanel1.Options.CloseOnOuterClick = true;
        flyoutPanelControl1.Controls.Add(mBrowser);
        flyoutPanel1.Size = new Size(300, this.Height - 100);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        flyoutPanel1.ShowPopup();
    }
}

运行应用点击按钮后,FlyoutPanel弹出,WebView2内容显示和交互均正常;但将flyoutPanel1.Size的高度值改为this.Height - 50后,点击WebView2内的按钮出现渲染异常。

以下是几种可行的解决方法:

  • 强制WebView2在尺寸变化时重绘
    给FlyoutPanel绑定SizeChanged事件,触发WebView2的重绘或刷新操作,确保控件适配新尺寸:

    private void flyoutPanel1_SizeChanged(object sender, EventArgs e)
    {
        mBrowser.Invalidate();
        mBrowser.Update();
        // 若重绘无效,刷新当前页面
        if (mBrowser.CoreWebView2 != null)
        {
            mBrowser.CoreWebView2.Navigate(mBrowser.CoreWebView2.Source);
        }
    }
    

    记得在Form构造函数中添加事件绑定:

    flyoutPanel1.SizeChanged += flyoutPanel1_SizeChanged;
    
  • 延迟WebView2内容加载时机
    不在Form构造函数中直接设置WebView2的Source,而是等FlyoutPanel弹出后再加载内容,确保控件已获得正确尺寸:
    修改按钮点击方法为异步:

    private async void button1_Click(object sender, EventArgs e)
    {
        flyoutPanel1.ShowPopup();
        // 确保WebView2核心已初始化
        if (mBrowser.CoreWebView2 == null)
        {
            await mBrowser.EnsureCoreWebView2Async();
        }
        string webContent = "C:\\Users\\username\\AppData\\Local\\Temp\\CommonNavigation.html";
        mBrowser.Source = new Uri(webContent);
    }
    
  • 优化FlyoutPanel布局与动画设置
    确保承载WebView2的flyoutPanelControl1布局正确,同时关闭FlyoutPanel动画避免尺寸突变导致的渲染问题:

    // 在Form构造函数中添加
    flyoutPanelControl1.Dock = DockStyle.Fill;
    flyoutPanel1.Options.AnimationType = DevExpress.Utils.Win.PopupToolWindowAnimationType.None;
    
  • 更新控件版本
    旧版本的WebView2运行时或DevExpress控件可能存在尺寸适配bug,尝试更新到最新稳定版:

    • 下载最新WebView2运行时
    • 更新DevExpress控件至最新版本

内容的提问来源于stack exchange,提问作者Toufic Makhoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:22:44