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
相关产品推荐
相关产品推荐

