如何在C# WinForms中实现带圆角的DevExpress Flyout ToolTip(含UserControl)
解决DevExpress Flyout ToolTip使用UserControl时的圆角边框问题
当你使用UserControl作为DevExpress Flyout ToolTip的自定义内容时,仅设置ToolTipController的Rounded属性或给UserControl设置圆角区域,只会让内部控件变成圆角,但外层ToolTip容器的方形边框依然存在。以下是两种可行的解决方法:
方法一:自定义绘制外层ToolTip容器的圆角
通过ToolTipController的CustomDraw事件,手动修改外层FlyoutForm的区域为圆角,让整个ToolTip容器呈现圆角效果:
- 订阅
CustomDraw事件:
this.toolTipController1.CustomDraw += ToolTipController1_CustomDraw;
- 实现事件处理逻辑:
private void ToolTipController1_CustomDraw(object sender, ToolTipControllerCustomDrawEventArgs e) { if (e.Info.FlyoutControl != null) { var flyoutForm = e.ToolTipControl as DevExpress.Utils.Flyouts.FlyoutForm; if (flyoutForm != null) { int roundRadius = 15; // 与你期望的圆角半径保持一致 var bounds = flyoutForm.ClientRectangle; flyoutForm.Region = Region.FromHrgn(CreateRoundRectRgn(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom, roundRadius, roundRadius)); } } } // 复用你已定义的GDI函数 [System.Runtime.InteropServices.DllImport("gdi32.dll")] private static extern IntPtr CreateRoundRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidthEllipse, int nHeightEllipse);
方法二:调整UserControl布局隐藏外层边框
利用负Padding让UserControl的圆角区域覆盖外层ToolTip的方形边框,同时匹配背景色消除间隙:
在你的UCTest用户控件构造函数中添加以下代码:
public UCTest() { InitializeComponent(); // 设置负Padding让控件向外延伸,覆盖外层方形边框 this.Padding = new Padding(-2); // 匹配ToolTip的默认背景色,避免出现缝隙 this.BackColor = DevExpress.LookAndFeel.UserLookAndFeel.Default.Skin.Colors.GetColor("ToolTipBackgroundColor"); }
注意事项
- 确保
ToolTipController的ShowShadow属性设置为false,否则阴影会保留方形轮廓,破坏圆角视觉效果; - 两种方法可以结合使用,先通过
CustomDraw修改外层容器圆角,再调整UserControl的Padding和背景色,确保没有视觉间隙。
内容的提问来源于stack exchange,提问作者Tomasz Filipek
相关产品推荐
相关产品推荐

