此主题提供了关于 XtraGrid 中弹出式菜单的总说明。 对于列标头、分组面板和脚注单元格,XtraGrid 提供了默认的可以通过接管特定事件来定制的上下文菜单。 另外,可以为任何网格元素提供自定义菜单。
标准菜单
网格视图为最终用户提供了几个上下文菜单。 这些弹出式菜单可以执行链接到特定可视化元素的操作。 通过使用鼠标右键单击下面列出的任何可视化元素,就可以调用上下文菜单。
- 列标头
它的上下文菜单允许最终用户操作列 (应用排序,分组,计算最佳列宽,等等)。
- 脚注单元格
使用此菜单,最终用户可以为列指定或修改计算汇总的类型。
这些菜单项指定了汇总类型。 如果列的数据不是数值,则 Sum 和 Average 项被禁用。
- 分组面板
此菜单提供了与分组相关的选项。
可以折叠或展开所有分组行,或者清除分组。 当分组没有应用于当前视图中时,所有菜单项都不可访问。
GridView.OptionsMenu 属性提供了一组 Boolean 型标志,为最终用户指定上下文菜单的可用性。 GridOptionsMenu.EnableColumnMenu、GridOptionsMenu.EnableGroupPanelMenu 和 GridOptionsMenu.EnableColumnMenu 属性分别影响列菜单、分组面板菜单和脚注菜单的可用性。
要更好地控制上下文菜单,则可以使用 GridView.ShowGridMenu 事件。 如果 GridView.OptionsMenu 属性允许菜单被调用,则每当最终用户试图调用上下文菜单时,GridView.ShowGridMenu 事件都发生。 此事件的参数允许标识哪个菜单正要被显示,定制此菜单或防止它被调用。
GridView.GridMenuItemClick 事件发生,以响应菜单项被单击。 当特定菜单项被单击时,它允许取消执行默认的操作,并提供自定义处理来代替。 也可以执行默认处理以外的操作。 例如,当最终用户改变汇总类型时,可以更新汇总项的格式。 要学习更多关于高级菜单定制的内容,请参阅 为弹出式菜单实现自定义行为 主题。
菜单的外观
在默认情况下,XtraGrid 中的菜单项是由控件自身根据系统设置进行绘制的。 在这种情况下,改变控件的外观与感觉设置不会导致菜单外观被改变。
但是,如果把一个 BarManager 组件指派到此控件的 EditorContainer.MenuManager 属性,则可以控制它的菜单的外观。 将使用由 BarManager 公开的外观与感觉设置来绘制此菜单。 下面的插图展示了一个列标头的菜单,此菜单使用 Office2003 方案来绘制:注意,BarManager 是 XtraBars 库的一部分,不包含在 XtraGrid 套件中。
菜单对象
此小节提供关于用来实现控件菜单的对象结构的信息。 当定制标准菜单和创建新菜单时,这是有用的。
网格的所有菜单都在 DevExpress.XtraGrid.Menu 命名空间中声明。 下面的插图展示了菜单类的层次结构:
网格的菜单的基础类是 ViewMenu。 GridViewMenu 表示 网格视图 中菜单的基础类。 ViewMenu 和 GridViewMenu 对象不包含任何菜单项,而通过它们的在下表中列出的子类来添加菜单项:
菜单类 | 说明 |
---|---|
GridViewColumnMenu | 表示列标头的标准菜单。 |
GridViewGroupPanelMenu | 表示视图的分组面板的标准菜单。 |
GridViewFooterMenu | 表示脚注单元格的标准菜单。 |
如果需要定制标准菜单,则接管 GridView.ShowGridMenu 事件。 当菜单正要被调用时,此事件发生。 此事件的 Menu 参数引用了被显示的菜单。
每个菜单对象都有一个 Items 属性,表示它的菜单项集合。 可以根据特定的需要,随意修改此集合。 下面描述菜单项。
要为特定的网格元素 (行、指示器单元格等) 提供自定义菜单,则需要接管 BaseView.MouseDown 事件 (或网格控件的 MouseDown 事件),在事件中创建和显示新菜单。 自定义菜单可以被作为派生于 ViewMenu 及其任何子类的独立类来实现。 或者,可以直接在代码中创建所提供菜单的实例 (不继承)。 对于网格视图,自定义菜单应该基于 GridViewMenu 类或它的任何子类。 对于卡片视图,则使用 ViewMenu 类。 要显示所创建的菜单,则调用它的 Show 方法。
XtraGrid 菜单中的项由 DXMenuItem 对象或其子类对象表示。 所有菜单项都在 DevExpress.Utils.Menu 命名空间中声明。
菜单项支持所述的绘制机制,也即使用系统设置或 BarManager 的设置绘制它们,这取决于是否指派了控件的 EditorContainer.MenuManager 属性。分层示意图显示如下:
菜单项类 | 说明 |
---|---|
DXMenuItem | 表示常规项。 单击这种项则调用相关联的执行所需操作的委托。 |
DXMenuCheckItem | 表示有两种状态 (选中和取消选中) 的项。 单击这种项则切换它的状态,然后调用相关联的委托。 |
DXSubMenuItem | 表示一个包含其他项的项,也即子菜单。 要把子菜单添加到 DXSubMenuItem 项,则使用它的 Items 集合。 DXSubMenuItem 项可以与一个委托相关联,在它的子菜单被显示之前调用此委托。 举例来说,这允许动态装载 Items 集合。 |
每个菜单项都提供了许多可定制的属性:
菜单项的属性 | 说明 |
---|---|
Caption | 指定此项的标题。 |
Image | 指定在此项的标题前面显示的图像。 |
Shortcut | 指定用于激活此项的快捷键。 |
Tag | 允许把自定义数据与该项相关联。 |
Enabled | 指定该项是否可被访问。 |
Visible | 确定该项的可视性状态。 |
BeginGroup | 确定此项是否开始一个逻辑组。 组之间以水平线分隔。 |
要获得关于定制网格的标准菜单的示例,请参阅 为弹出式菜单实现自定义行为 主题。 创建自定义上下文菜单 主题提供了一个关于如何为 XtraGrid 创建新菜单的示例。