扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
infragistics是全球领先的UI工具和用户体验的专家,Infragistics开发了一系列的炫目的Windows、Web、WPF和Silverlight控件,相信很多人在使用它们。我们现在的项目就在使用Infragistics的Windows Form控件集。虽然这些控件功能强大,也不可能满足你所有的需求,尤其是那些比较苛刻的最终用户的需求。比如,我们最近就接收到这样一个变态的需求:让所以菜单项、工具栏按钮、网格单元的ToolTip以气球式的样式显示。最终,我不得不通过对现有控件的扩展实现这个要求。 一、扩展UltraGrid 下面是扩展控件ExtendedUltraGrid的定义,逻辑比较简单:直接继承自UltraGrid,重写两个方法:OnMouseEnterElement和OnMouseLeaveElement。当鼠标移入和移出相应元素的时候,这两个方法会被调用。通过重写OnMouseEnterElement方法,手工创建UltraToolTipInfo对象,并通过UltraToolTipManager对象(UltraToolTipManager在对象构建的时候被初始化)以ToolTip的形式显示出来;手工创建的ToolTip在OnMouseLeaveElement被执行的时候被移除。此外,由于UltraGrid的单元格和列头本身具有自己的ToolTip,你需要通过DisplayLayout.Override.TipStyleCell和DisplayLayout.Override.TipStyleHeader这两个属性抑制它们的显示。 1: using Infragistics.Win; 3: using Infragistics.Win.UltraWinToolTip;
5: namespace Artech.ExtendedControls4ToolTip
7: 9: 11: protected override void OnPaint(System.Windows.Forms.PaintEventArgs pe) 13: base.OnPaint(pe);
15: this.DisplayLayout.Override.TipStyleHeader = TipStyle.Hide;
17: 19: { 21: if (enteredCell != null) 23: if (enteredCell.Column.DataType == typeof(bool)) 25: return;
27:? 29: this.toolTipManager.SetUltraToolTip(this,gridToolTip); 31: 32: }
34: ColumnHeader enteredHeader = e.Element.GetContext(typeof(ColumnHeader)) as ColumnHeader; 37: enteredHeader.ToolTipText = string.Empty;
42: } 44: void OnMouseLeaveElement(UIElementEventArgs e)
46: base.OnMouseLeaveElement(e);
48: ColumnHeader enteredHeader = e.Element.GetContext( 49: if (null != enteredCell || null != enteredHeader) 51: this.toolTipManager.HideToolTip();
53: } 55: } 二、扩展UltraListView 扩展后的ExtendedUltrlListView的实现与ExtendedUltraGrid基本上完全一样,通过是对OnMouseEnterElement和OnMouseLeaveElement这两个方法的重写来实现,为了抑制UltrlListView自身的ToolTip的显示,需要将ViewSettingsDetails.SubItemTipStyle和ItemSettings.TipStyle两个属性设置为ItemTipStyle.Hide。下面是具体的代码定义: using Infragistics.Win; 4: using Infragistics.Win.UltraWinToolTip;
6: namespace Artech.ExtendedControls4ToolTip
8: 10: { 12: 14: { 16: this.ViewSettingsDetails.SubItemTipStyle = SubItemTipStyle.Hide;
18: } 20: 21: {
23: UltraListViewItem enteredItem = e.Element.GetContext(typeof(UltraListViewItem)) as UltraListViewItem; 25: { 28: 29: }
31: 34: 35: UltraListViewItem enteredItem = e.Element.GetContext( 36: null != enteredItem) 38: this.toolTipManager.HideToolTip();
40: } 42: } 三、扩展UltraToolbarsManager 右图是应用了扩展后的UltraToolbarsManager,工具栏ToolTip显示的样式,实际上当通过鼠标选择某个菜单项的时候,也具有相同样式的Tooltip相识。如果仔细看的话,你还会发现ToolTip的背景和上面默认的颜色不一样,这是因为在程序初始化后设置了样式。ToolTip的样式也随之发生了变化,以与整个风格相匹配。 扩展后的ExtendedUltraToolbarsManager的实现与上面的方式类似,同样是通过重写OnMouseEnterElement和OnMouseLeaveElement这两个方法。不过有一点不同的是:用于显示ToolTip的ToolTipManager的ShowToolTip接收参数的类型为Control,但是UltraToolbarsManager本身却并不是从Control类型派生。在这里采用了一个变通的方式:定义了一个Control类型的属性ContainerToBindToolTip,通过该属性从外部注定一个绑定ToolTip的控件。ExtendedUltraToolbarsManager定义如下: using System.Windows.Forms;
6:? class ExtendedUltraToolbarsManager : UltraToolbarsManager 12: 13:
15: { get; set; } 17: 19: : base(container)
this.toolTipManager = new UltraToolTipManager();
23: 26: 27: this.ShowToolTips) this.ShowToolTips = false;
31:? 33: null != tool)
35: UltraToolTipInfo toolTip = new UltraToolTipInfo(tool.CaptionResolved.Replace("&",1)">string.Empty),DefaultableBoolean.Default); 37: { 39: this.toolTipManager.ShowToolTip(ContainerToBindToolTip);
47: ToolBase tool = e.Element.GetContext(as ToolBase;
49: { 52: } 54: } 作者:Artech
出处:http://artech.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC 5应用程序中使用autofac in为SignalR
- 如何下载特定版本的ASP.NET MVC 5源代码
- asp.net – CompareValidator的间歇性错误 – ValueToCompa
- asp.net-mvc – 具有Repository,Service Layer和使用Model
- 编辑/添加时Asp.Net MVC不重复表单
- asp.net-web-api – 将JSON数组从Javascript传递到Web API
- asp.net-mvc-3 – MVC3 – 如何在最后插入一个带有换行符的
- asp.net core 从单机到集群
- asp.net – 使用内部HTML与ASP:按钮?
- asp.net – 使用Razor的Html.EditFor限制文本框中字符的长度