商信互联
为了在UI中显示动作,eXpressApp框架使用动作容器。动作容器是一个控件,它可以在UI中显示一个动作,或者包含几个显示一组指定动作的控件。操作容器位于模板上。eXpressApp框架中有几种类型的动作容器。本主题定义了所有容器,并提供了有关如何自定义动作容器和实现自己的容器的信息。
动作容器是实现IActionContainer接口的控件。此接口提供对Action集合的访问,并声明IActionContainer.Register方法以创建表示Action的控件。该eXpressApp框架提供的内置动作集装箱许多用于在Windows窗体和ASP.NET Web应用程序自动UI建设。Windows窗体和ASP.NET Web应用程序的内置操作容器分别位于DevExpress.ExpressApp.Win和DevExpress.ExpressApp.Web程序集中。下表列出了所有这些动作容器:
动作容器 | 基类 | 描述 |
---|---|---|
ActionContainerBarItem | XafBarLinkContainerItem | 工具栏的ItemLinks容器。将“动作”显示为工具栏项。 |
ActionContainerMenuBarItem | ActionContainerBarItem | 与将SingleChoiceAction.ItemType属性设置为ItemIsMode值且ChoiceActionBase.IsHierarchical方法返回false时,用于SingleChoiceAction类型Actions的控件中的ActionContainerBarItem Action容器不同。在这种情况下,ActionContainerMenuBarItem使用BarSubItem条项目将这些操作显示为子菜单项。 |
ButtonsContainer | 布局控件 | 布局控件。创建一个布局项目,其中包含每个Action的按钮。 |
NavigationAction容器 | 控制板 | 导航控件。将ShowNavigationItem操作的项目显示为导航控件链接。使用NavBarNavigationControl和TreeListNavigationControl控件。 |
动作容器 | 基类 | 描述 |
---|---|---|
ActionContainerHolder | 一组链接,一组按钮或工具栏。视觉表示由ContainerStyle属性定义,该属性可以设置为ActionContainerStyle.Links,ActionContainerStyle.Buttons或ActionContainerStyle.ToolBar。ActionContainerHolder类具有影响其行为的重要属性: 方向-当此属性设置为ActionContainerOrientation.Horizontal时,动作从左到右水平排列。当此属性设置为ActionContainerOrientation.Vertical时,动作从上到下垂直排列。 | |
NavigationAction容器 | 导航控件。显示ViewsNavigation类别中的ShowNavigationItem操作。操作的项目显示为导航控件链接。在内置的DefaultVertical模板中使用。使用NavBarNavigationControl和TreeListNavigationControl控件。 | |
NavigationHistoryActionContainer | 用于显示ViewsHistoryNavigation类别中的Actions。将操作的项目显示为链接,以分隔符分隔。在新的Web UI中不可用。 | |
NavigationTabsActionContainer | 选项卡式导航控件。用于显示ViewsNavigation类别中的ShowNavigationItem操作。该操作的第一级导航项显示为选项卡页面,其子级导航项显示为链接。 | |
QuickAccessNavigationActionContainer | 用于显示ViewsNavigation类别中的ShowNavigationItem操作。将操作的项目显示为链接,以分隔符分隔。 |
创建模板时,还将创建其所有动作容器。然后,内置的FillActionContainers控制器使用应用程序模型来确定要在操作容器中显示的操作。特别是ActionDesign | ActionToContainerMapping节点提供此信息。然后,此控制器为每个动作调用动作容器的Register方法,以创建相应的控件。操作容器为每种操作类型创建特定的控件。例如,ActionContainerBarItem操作容器为SimpleAction操作创建BarButtonItem对象,然后BarEditItem控件,用于SingleChoiceAction操作等。
您可以在设计时和运行时以代码自定义特定操作容器的操作集。
该应用程序模型包含ActionDesign | ActionToContainerMapping节点。该节点包含有关特定动作容器必须显示哪些动作的信息。您可以在设计时或运行时在“模型编辑器”中自定义自动生成的信息(请参阅“将动作放置在其他位置”)。在此节点中,您可以将动作移至另一个动作容器,从特定的动作容器中删除动作,等等。您还可以添加新的动作容器并向其添加动作,但是此动作容器仅显示在用户界面中如果它包含在模板中。有关此“应用程序模型”节点的信息,请参考IModelActions。 接口说明。
要自定义动作容器,请处理Frame.ProcessActionContainer事件。您可以使用其属性来自定义动作容器。您还可以使用IActionContainer.Actions属性访问特定操作容器的操作,并自定义所需的操作。例如,您可以停用Action,并调用其ActionBase.Active属性。另外,您可以访问Action的控件并对其进行自定义。
您可以通过处理相应条项目工厂的CustomizeActionControl事件来自定义工具栏的条项目。若要了解如何执行此操作,请参阅“如何:自定义动作控件”主题。
您可以处理ActionControlsSiteController.CustomizeContainerActions事件,以在代码中自定义操作到容器的映射。
在ASP.NET应用程序中,可以将“操作”分组到一个下拉菜单中,并将默认“操作”作为根菜单项放置。
您可以自定义ASP.NET应用程序模板,以访问某些在应用程序模型中不可用的动作容器设置。在ASCX文件中,您可以通过其ContainerId值找到所需的WebActionContainer项并设置以下属性:
没有默认操作的下拉菜单(根项仅展开菜单,并且与操作无关):
<ActionContainers>
<xaf:WebActionContainer IsDropDown="true" ContainerId="Security" DefaultItemCaption="My Account" DefaultItemImageName="BO_Person" />
</ActionContainers>
带有默认操作的下拉菜单:
<ActionContainers>
<xaf:WebActionContainer ContainerId="Save" DefaultActionID="Save" IsDropDown="true" AutoChangeDefaultAction="true" />
</ActionContainers>
如果默认为SingleChoiceAction,它将显示在主菜单(无子项)和下拉菜单(有子项)中。
如果需要更改用于显示操作的控件,则可以实现自己的操作容器。为此,请从所需的控件继承并实现IActionContainer接口。另一种方法是从上面列出的现有操作容器之一派生自定义容器。请注意,您可能还需要指定每种操作类型要使用的控件。
声明自己的动作容器后,请按照以下主题中的说明创建一个新的模板或自定义一个现有的模板。
将您的动作容器添加到模板,然后将您的动作容器的实例添加到模板的IFrameTemplate.GetContainers方法返回的列表中。如果安装了XAF源,则可以在以下位置查看如何实现内置的操作容器: