Visual Studio 2010 中的扩展性更改

适用于 Visual Studio 的 WPF 设计器为实现 WPF 和 Silverlight 控件的自定义设计体验提供了一个成熟的平台。 自 Visual Studio 2008 中的初次发布以来,WPF 设计器扩展性 API 已得到了显著的发展。 以下各节描述了用于 Visual Studio 2010 的 WPF 设计器扩展性发生的变化。

对 Silverlight 和多个平台版本的支持

在 Visual Studio 2008 中,控件设计时只能以最新的 WPF 平台版本为目标。 在 Visual Studio 2010 中,这种支持扩展到多个平台,包括对 WPF 3.5、WPF 4.0、Silverlight 3 和未来平台发行版的设计时支持。 因为所有这些平台都有同一可扩展性 API,控件设计时作者可以轻松地编写一种体验,并将其在各种平台的控件运行时之间共享。

Expression Blend 中的支持情况

通过使用 Visual Studio 中提供的同一可扩展性接口,您现在能够以 Expression Blend 为目标实现您的控件设计时。 您可以决定是为这两种创作环境分别提供设计时体验,还是提供通用的设计时体验。

注册元数据

在该可扩展性 API 中,最显著的差异是:IRegisterMetadata 接口已替换为 IProvideAttributeTable 接口。 这种更改与多平台支持功能的结合,使可扩展性 API 发生了突破性的变化。 这意味着,Visual Studio 2010 中将不会加载 Visual Studio 2008 现有的控件设计时实现。

此外,在 Visual Studio 2010 中,您使用 ProvideMetadataAttribute 特性来指示设计时程序集向设计器提供元数据。

新的扩展点

新的扩展性 API 还支持新的设计时体验,包括:

  • 在“属性”窗口中,支持从类别编辑器访问模型。 这种变化与将通用属性提升到类别列表的顶部一起,使控件作者能够在“属性”窗口中提供丰富的编辑体验。

  • 新的 AdornerPanel 实用工具方法,能够更加轻松地相对于自定义控件放置装饰器。

  • 用于在不同的设计工具(例如 Visual Studio 和 Expression Blend)之间共享设计时实现的新编程模型。

  • 用于在多个目标框架之间共享设计时实现的新编程模型。

比较 Visual Studio 2008 和 Visual Studio 2010 中的扩展性

下表总结了 Visual Studio 2008 和 Visual Studio 2010 中的创作自定义设计时体验之间的差异。

Visual Studio 2008

Visual Studio 2010

若要注册设计时类型,请实现 IRegisterMetadata 接口并使用 MetadataStore 类。

若要注册设计时类型,请实现 IProvideAttributeTable 接口并调用 CreateTable 方法。

无需添加程序集级别特性。

必须用 ProvideMetadataAttribute 特性标记设计时程序集。

若要将设计器类型与图形元素关联,请对 NewItemFactory 使用 GetImage 方法,该方法可能会返回各种元素类型。

若要将设计器类型与图标关联,请使用 GetImageStream 方法返回位图。 只支持位图。

若要访问模型属性,请使用依赖项属性,例如:

ModelProperty backgroundProperty = adornedControlModel.Properties[Control.BackgroundProperty];

若要访问模型属性,请使用依赖项属性的名称,例如:

ModelProperty backgroundProperty = adornedControlModel.Properties["Background"];

此外,您可以定义 PropertyIdentifier(一个类型/字符串组合)。 当简单名称查找不足时,会将 PropertyIdentifier 与附加的属性一起使用。

若要区分布局空间和呈现空间,请使用 AdornerCoordinateSpaces 类。

不使用 AdornerCoordinateSpaces 类。

若要指定相对于内容的装饰器位置,请使用 AdornerPlacementCollection 类。

若要指定相对于内容的装饰器位置,请使用 SetAdornerHorizontalAlignmentSetAdornerVerticalAlignmentSetAdornerMargin 方法。 保留 AdornerPlacementCollection 类的目的是为了向后兼容。

请参见

其他资源

WPF 设计器扩展性