加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip

发布时间:2020-12-16 09:10:02 所属栏目:asp.Net 来源:网络整理
导读:infragistics是全球领先的UI工具和用户体验的专家,Infragistics开发了一系列的炫目的Windows、Web、WPF和Silverlight控件,相信很多人在使用它们。我们现在的项目就在使用Infragistics的Windows Form控件集。虽然这些控件功能强大,也不可能满足你所有的需

infragistics是全球领先的UI工具和用户体验的专家,Infragistics开发了一系列的炫目的Windows、Web、WPF和Silverlight控件,相信很多人在使用它们。我们现在的项目就在使用Infragistics的Windows Form控件集。虽然这些控件功能强大,也不可能满足你所有的需求,尤其是那些比较苛刻的最终用户的需求。比如,我们最近就接收到这样一个变态的需求:让所以菜单项、工具栏按钮、网格单元的ToolTip以气球式的样式显示。最终,我不得不通过对现有控件的扩展实现这个要求。

一、扩展UltraGrid

首先介绍对UltraGrid的扩展,先来看看显示的效果:当鼠标移到到每一个单元格(或者列头)的时候,会出现如下一个气球式的ToolTip,其文字的内容为单元格中的文本。ToolTip的样式,包括背景、字体等均可以通过Infragistics控件本身支持的风格文件定义。

下面是扩展控件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

下面是扩展后的UltrlListView(在Detail模式)的ToolTip显示的样式,ExtendedUltraGrid差不多:当鼠标移到相应的ListViewItem上面,将相应的内容以气球式的ToolTip实现出来。

扩展后的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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读