XtraEditors 库 的编辑器可以被用于在 Developer Express 提供的 容器控件 中执行内置编辑。 本主题描述用于为容器控件指派内置编辑器的机制。
编辑器的 Repositories 和 Repository 项
可以用于内置编辑的每个编辑器都有一个 Properties 属性,此属性存储了与此编辑器相对应的设置和事件处理程序。 此属性表示派生于 RepositoryItem 类的一个实例。 例如,日期编辑器 (DateEdit) 提供的 DateEdit.Properties 属性是 RepositoryItemDateEdit 类型的。
派生于 RepositoryItem 类的对象被称为 Repository 项。 如您所见,repository 项是编辑器的一部分 (可以通过编辑器的 Properties 属性来访问 repository 项)。 但是 repository 项也可以作为独立对象存在。
应该创建特定的 repository 项作为独立对象,来把特殊类型的编辑器嵌入到容器控件 (XtraGrid、XtraVerticalGrid、XtraTreeList 和 XtraBars) 中。 例如,需要创建一个 RepositoryItemButtonEdit 对象,来把 ButtonEdit 嵌入到容器控件中。 请参阅 编辑器列表 文档来获得可以被作为内置编辑使用的编辑器清单、及其相应的 repository 项。
在 repository 项中包含了创建全功能编辑器的充足信息。 例如,当最终用户在 XtraGrid 控件内单击某个单元格来激活内置编辑器时,此网格将执行下列操作:
- 首先,它查找已指派到此单元格的 repository 项。
- 然后,根据由 repository 项提供的信息,创建一个与之对应的编辑器。
- 然后,源 repository 项的所有设置和事件处理程序都被复制到编辑器的 Properties 属性。
- 最后,把编辑器显示在被单击的单元格内部。 当最终用户结束操作此单元格时,此编辑器被自动销毁,但是源 repository 项不受影响。
要在容器控件中使用某个 repository 项,则必须把它添加到容器控件的 内部的编辑器 repository 或 外部的编辑器 repository:
-
控件的内部 repository。
添加到“内部 repository” 的“Repository 项”只能在此控件内使用,并且不能在其他容器控件内使用。
对于 EditorContainer 的子类 (XtraGrid、XtraTreeList 和 XtraVerticalGrid),可以通过 EditorContainer.RepositoryItems 属性访问“内部的编辑器 repository”。 对于 ComponentEditorContainer 的子类 (XtraBars),则使用 ComponentEditorContainer.RepositoryItems 属性。
- 外部 repository。
“外部的编辑器 repository”可以被绑定到同一应用程序内的多个容器控件。 添加到“外部的编辑器 repository”的“Repository 项”可以被所有与其绑定的控件间共享。
“外部的 repository”是由一个 PersistentRepository 组件表示的。 要把某个“外部的 repository”绑定到某个容器控件,则使用 EditorContainer.ExternalRepository 属性。 对于容器组件,则应该使用 ComponentEditorContainer.ExternalRepository 属性。
容器可以使用存储在这两种 repositories 中的 “repository 项”。 因此,可用的 “repository 项” 的整个集合由存储在“内部的 repository”中的项、以及添加到绑定“外部的 repository”中的项组成 (如果存在)。
在设计时刻,在容器内创建的“Repository 项”被自动添加到“内部的 repositories”中。 通过代码创建的“Repository 项”应该人工添加到 repositories 中。
示例
下列代码展示了如何把一个用作内置编辑的 DateEdit 编辑器,指派到 XtraTreeList 的列中。 首先,与所需编辑器相对应的一个 repository 项 (RepositoryItemDateEdit) 被创建,并且被添加到此控件的“内部 repository”中。 然后此“repository 项”被绑定到特定的某个列:
C# | 复制代码 |
---|---|
RepositoryItemDateEdit riDateEdit = new RepositoryItemDateEdit(); // Customize the item... // Add the item to the control's internal repository. treeList1.RepositoryItems.Add(riDateEdit); // Bind the item to the control's column. treeList1.Columns["Start Date"].ColumnEdit = riDateEdit; |
Visual Basic | 复制代码 |
---|---|
Dim riDateEdit As RepositoryItemDateEdit = New RepositoryItemDateEdit() ' Customize the item... ' Add the item to the control's internal repository. TreeList1.RepositoryItems.Add(riDateEdit) ' Bind the item to the control's column. TreeList1.Columns("Start Date").ColumnEdit = riDateEdit |
结果如下图所示:
设计时刻的工具
Developer Express 提供的所有容器组件和容器控件都有自己的工具 (全部都非常类似),来在设计时刻管理它们的“内部 repository”。 下列屏幕截图演示了如何把编辑器添加到网格控件的“内部 repository”中。 这是使用网格控件的设计器对话框完成的。
此列表显示了所有位于此网格控件的“内部 repository”中的“repository 项”。 要把编辑器添加到此 repository,则按下 Add(添加) 按钮旁边的下拉箭头。 这将打开下拉列表,允许指定“repository 项”的类型:
“外部的 repositories” (PersistentRepository 组件) 提供了一个类似的设计器来管理其“repository 项”集合。 要调用此设计器,则按下与 EditorsRepositoryBase.Items 属性相对应的省略号按钮。
一旦“repository 项”被添加到所需的集合中、并且按需定制之后,就应该把它们绑定到特定的可视化元素 (列、数据单元格等)。 要学习如何执行此操作,请参阅为所用容器控件或容器组件提供的文档。