資料太少.中文沒有.英文的也殘缺不全.待補充.問題暫時解決.
設計器通過使用命名約定來發現自定義設計時程序集
運行時程序集與設計時程序集對應關系
加載順序 | 程序集名稱(*表示版本號,可省略) | |
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(為主選項顯示的一組裝飾器)
...等