用户界面类型编辑器概述

通过实现一个用户界面 (UI) 类型编辑器,您可以为复杂的属性类型提供自定义设计时体验。

显示和编辑自定义类型

当您将一个自定义类型公开为一个属性时,有三种在 PropertyGrid 中编辑属性的值的方法。

  • 您可以就地将属性作为一个字符串进行编辑。 这要求一个针对您的自定义类型的 TypeConverter。 有关更多信息,请参见如何:实现类型转换器

  • 您可以使用下拉列表 UI 来编辑属性。 对于那些通过单击一下就可设置的属性来说,这尤其有用。

  • 您可以使用模式对话框编辑属性。 如果属性特别复杂,则可能需要使用一个完全对话框来正确编辑属性。

若要启用单击或模式对话框编辑,您需要实现一个 UI 类型编辑器来与 PropertyGrid 进行交互。

下拉编辑器

下拉编辑器特别适用于那些可通过单击进行设置的类型。 例如,您可使用下拉编辑器来编辑 PropertyGrid 中的 Control 类的 DockBackColor 属性。

您可通过单击箭头按钮 (属性窗口的向下箭头) 来访问下拉列表 UI 类型编辑器,该按钮显示在 PropertyGrid 中所选的属性项的旁边。 此时将显示附加到 PropertyGrid 的自定义 UI。 其窗口的顶部位于该属性项的底部,其宽度与该属性项的宽度相匹配。 此编辑器窗口在用户作出选择之后也必须关闭。 您的实现必须调用 DropDownControl 方法来在设计环境中定位您的 UI 类型编辑器并设置其大小,而且您必须调用 CloseDropDown 方法以关闭该窗口。

模式对话框编辑器

模式编辑器对于需要完全交互式 UI 的类型很有用。 例如,集合编辑器(例如 TabControl 的**“TabPage 集合编辑器”)和 DataGridView 控件的“编辑列”**对话框都是模式编辑器。

您可通过单击省略号按钮 (VisualStudioEllipsesButton 屏幕快照) 来访问模式 UI 类型编辑器,该按钮显示在 PropertyGrid 中所选的属性项的旁边。 此时会显示模式对话框,用户与它交互就像与普通对话框交互一样。 您的实现必须调用 ShowDialog 方法来在设计环境中定位您的对话框并调整其大小。

实现 UI 类型编辑器

若要实现自定义 UI 类型编辑器,您至少必须执行以下任务:

您可以通过执行以下任务来在 PropertyGrid 中添加对绘制值的表示形式的更多支持:

  • 重写 GetPaintValueSupported 以指示编辑器支持显示值的表示形式。

  • 重写 PaintValue 以实现值的表现形式的显示。

  • 如果编辑器应具有初始化行为,则重写 UITypeEditor 构造函数方法。

提示

通常使用 System.Windows.Forms 命名空间中的类型实现 UI 类型编辑器,但并不要求必须这样做。 .NET Framework 中的标准 UI 类型编辑器是从 UITypeEditor 派生的。

从 UITypeEditor 类派生

您的自定义 UI 类型编辑器必须从 UITypeEditor 类派生。 如果您的 UI 类型编辑器需要进行特殊的初始化,则应定义一个默认的构造函数。

重写 GetEditStyle 方法

当您在设计器中选择一个组件或一个控件时,将使用所选组件或控件的属性值重新绘制**“属性”**窗口。 当您选择一个属性时,设计环境查询 GetEditStyle 方法来确定如何表示属性项。

您的重写会返回 UITypeEditorEditStyle 枚举中的值以传递合适的 UI 类型编辑器样式。

下表显示了与各个 UITypeEditorEditStyle 值相关联的行为。

成员名称

行为

None

不提供任何交互式 UI 组件。 将使用适当的 TypeConverter 来将字符串项转换为属性值。

DropDown

在属性项中显示一个下拉列表按钮 (属性窗口的向下箭头)。 该 UI 由一个下拉列表窗口承载。

Modal

在属性项中显示一个省略号按钮 (VisualStudioEllipsesButton 屏幕快照)。 该 UI 是一个模式对话框。

重写 EditValue 方法

EditValue 方法显示该 UI 并将该属性的值设置为用户所选的值。

下拉编辑器

对于下拉列表 UI 类型编辑器,可向服务提供程序查询 IWindowsFormsEditorService 接口。 此项服务可为您的 UI 提供位置和大小信息。 您的 UI 通常会作为一个 Control 来实现。 您的 EditValue 实现创建此控件的一个实例,使用当前的属性值将其初始化,然后将其传递给该设计环境执行的 DropDownControl 方法。 当用户为该属性选择了一个新值后,您的 EditValue 实现将通过调用 CloseDropDown 关闭该 UI。 从您的 EditValue 实现返回的值将成为新的属性值,显示在 PropertyGrid 中。

模式编辑器

对于模式 UI 类型编辑器,可向服务提供程序查询 IWindowsFormsEditorService 接口。 此项服务可为您的对话框提供位置信息。 您的 UI 通常将作为一个从 Form 派生的类来实现。 您的 EditValue 实现将创建此窗体的一个实例,使用当前属性值将其初始化,然后将其传递给该设计环境执行的 ShowDialog 方法。 如果此调用的返回值为 OK,则您应从窗体中检索新的属性值并将其用作返回值。 从您的 EditValue 实现返回的值将成为新的属性值,显示在 PropertyGrid 中。

ITypeDescriptorContext 参数

EditValue 方法接收到一个 ITypeDescriptorContext 参数,您可以使用该参数来查询关于设计环境的上下文信息。 使用此参数,您可以访问以下成员:

提供属性值的图形化表示形式。

您可以通过重写 PaintValue 方法来显示您的属性值的图形化表示形式。 您可以使用提供的 PaintValueEventArgs 参数来在 PropertyGrid 中的属性项左边的小矩形中绘制表示形式。

提示

请确保您的图形化表示形式保持在 PaintValueEventArgs 参数的 Bounds 属性定义的界限之内。

可以重写 GetPaintValueSupported 方法以返回 true,从而向设计环境发出警报:您的 UI 类型编辑器为它的值绘制了一个自定义表示形式。

请参见

任务

如何:创建用户界面类型编辑器

如何:创建利用设计时功能的 Windows 窗体控件

参考

UITypeEditorEditStyle

IWindowsFormsEditorService

其他资源

用户界面类型编辑器