WPF设计时
程序员文章站
2022-03-25 15:49:12
资料太少.中文没有.英文的也残缺不全.待补充.问题暂时解决. 设计器通过使用命名约定来发现自定义设计时程序集 运行时程序集与设计时程序集对应关系 使用IProvideAttributeTable接口 使用基类DefaultInitializer提供初始化默认值 可用基类包含: DefaultInit ......
资料太少.中文没有.英文的也残缺不全.待补充.问题暂时解决.
设计器通过使用命名约定来发现自定义设计时程序集
运行时程序集与设计时程序集对应关系
加载顺序 | 程序集名称(*表示版本号,可省略) | |
0 | ControlLibrary.dll | 运行时程序集 |
1 | ControlLibrary.Design.*.dll | 设计时程序集(Visual Studio和Blend公用) |
2 | \Design\ControlLibrary.Design.*.dll | 设计时程序集(Visual Studio和Blend公用) |
3 | ControlLibrary.VisualStudio.Design.*.dll | 设计时程序集(Visual Studio专用) |
3 | ControlLibrary.Expression.Design.*.dll | 设计时程序集(Blend专用) |
4 | \Design\ControlLibrary.VisualStudio.Design.*.dll | 设计时程序集(Visual Studio专用) |
4 | \Design\ControlLibrary.Expression.Design.*.dll | 设计时程序集(Blend专用) |
使用IProvideAttributeTable接口
[assembly: ProvideMetadata(typeof(CustomControlLibrary.Design.Metadata))] namespace CustomControlLibrary.Design { internal class Metadata : IProvideAttributeTable { public AttributeTable AttributeTable { get { AttributeTableBuilder builder = new AttributeTableBuilder(); builder.AddCustomAttributes( typeof(Test), new FeatureAttribute(typeof(TestDefaults))); return builder.CreateTable(); } } } }
使用基类DefaultInitializer提供初始化默认值
namespace CustomControlLibrary.Design { public class TestDefaults : DefaultInitializer { public override void InitializeDefaults(ModelItem item) { item.Properties["Context"].SetValue(new TextBox()); } } }
可用基类包含:
DefaultInitializer(默认值初始化);
AdornerProvidres(为 WPF 控件提供容器,这些控件在设计时用作装饰器);
PrimarySelectionContextMenuProvider(为当前所选内容显示的一组 MenuGroup 项);
PrimarySelectionAdornerProvide(为主选项显示的一组装饰器)
...等