在开发WPF应用程序时,为第三方UI控件提供设计时支持是一个重要的环节。本文将介绍如何为WPF控件库添加设计时支持,特别是如何使用DesignSurface来简化设计器的开发。
DesignSurface是一个装饰器(adorners),能够为设计器类中的设计器动词集合自动生成属性编辑器。这意味着,无论控件类型是什么,DesignSurface都能帮处理值的变更并更新设计器,只需要从DesignSurface派生并添加感兴趣的设计器动词,然后将其构建到一个单独的程序集中,并与控件库一起部署。
在开始之前,了解一些构建和部署设计器扩展项目的指导原则是必要的。以下是一些基本规则:
设计器扩展部署在不同的DLL中,并且只在Visual Studio设计器上下文中有效,它不会影响控件的运行时行为。
让看看如何开始使用DesignSurface。假设已经有了自己的自定义控件,并且打算使用DesignSurface来添加设计器支持。
首先,设置一个设计器项目。例如,有一个名为“DesignerExpander”的简单控件,它从Expander派生而来。现在,需要为客户提供良好的设计时体验,将定义设计器动词,DesignSurface将处理其余的工作。
DesignerExpander实际上就是一个Expander控件,需要在设计器中暴露以下属性:
实现IProvideDesignerVerbs接口用于收集designerverb,并添加上述四个属性到设计器动词集合中。
public DesignerVerbCollection GetDesignerVerbs()
{
DesignerVerbCollection verbs = new DesignerVerbCollection();
verbs.AddHeader("CustomControl Editor");
verbs.AddHeader("Appearance");
verbs.AddProperty(DeisgnerExpander.HeaderProperty, "Header");
verbs.AddProperty(DeisgnerExpander.ContentProperty, "Content");
verbs.AddHeader("Behavior");
verbs.AddProperty(DeisgnerExpander.IsExpandedProperty, "IsExpanded");
verbs.AddProperty(DeisgnerExpander.VisibilityProperty, "Visibility");
return verbs;
}
在DesignSurface的构造函数中注册设计器类型,并提供控件类型的信息。
DesignSurface.RegisterDesignerVerbProvider(typeof(DeisgnerExpander), typeof(CustomControlDesigner));
public override Type ControlType {
get {
return typeof(DeisgnerExpander);
}
}
现在已经了解了如何设置,让快速浏览一下项目中使用的帮助器和包装器,然后深入概念。
本文到此结束,希望喜欢。不要忘记留下评论和建议。下次见!