WPF设计器扩展性--WPF控件设计时支持基础
1、设计时支持—命名约定
设计时代码在特定元数据程序集中部署。受所有设计器支持的设计时功能在主库名称附加有“.Design”的程序集内部署。仅受 Visual Studio 支持的设计时功能在主库名称附加有“.VisualStudio.Design”的程序集内部署。
如:
SkewButtonLibrary.dll
SkewButtonLibrary.VisualStudio.Design.dll
2、设计时支持的结构---元数据
元数据
当设计工具(如 Visual Studio)打开自定义控件的程序集时,它还查找相关的设计时程序集。 特别是,设计工具查找 ProvideMetadataAttribute 程序集级特性。 在找到该特性后,设计器会在程序集内搜索实现 IProvideAttributeTable 接口的类。 设计器会在该类的 AttributeTable 属性中查询用来指定设计时行为的特性集合。
3、设计时支持的结构---功能提供者
功能提供者
功能提供程序是一个轻型类型,它为对象提供额外的设计时功能。有些功能提供程序可能仅仅提供有关子组件的信息,不需要代表设计器执行任何操作。其他功能提供程序可以向对象的设计器上下文菜单添加菜单项、创建用于大小调整或编辑操作的自定义装饰器,或者重新定义对象在设计器上的拖放。
功能提供程序是通过直接从 FeatureProvider 类派生或者从本身也是从 FeatureProvider 派生的类(如 AdornerProvider 和 ContextMenuProvider)派生来实现的。功能提供程序采用轻型设计,不应尝试在两个实例之间保存状态。
功能提供程序旨在成为扩展性的轻型实现。涉及设计器扩展性时,通常倾向于从现有的功能提供程序类派生,而不是创建新的功能连接器。功能提供程序不得保存状态,因为它们会创建和销毁多次。
4、设计时支持的结构---功能提供者
功能提供者
System.Object
Microsoft.Windows.Design.Features.FeatureProvider
Microsoft.Windows.Design.Interaction.Adapter
Microsoft.Windows.Design.Interaction.AdornerProvider
Microsoft.Windows.Design.Interaction.ContextMenuProvider
Microsoft.Windows.Design.Interaction.TaskProvider
Microsoft.Windows.Design.Model.DefaultInitializer
Microsoft.Windows.Design.Model.DesignModeValueProvider
Microsoft.Windows.Design.Model.InstanceFactory
5、设计时支持的结构---编辑模型
控件是使用可扩展应用程序标记语言 (XAML) 定义的。控件 XAML 的更新通过编辑模型ModelItem,以编程方式实现。