最近用Blend3做Silverlight3开发,发现用原来的方法写自定义控件的设计时扩展不能用了,经过研究才发现 Blend3 里面的设计时扩展有所改变,原理和实现方式没有变,但接口变了。原来的实现可参考如下连接:Silverlight 自定义控件设计时扩展。
主要的改变如下:
1.MetadataRegistration实现的接口改为了IProvideAttributeTable
2.引用的设计时扩展组件改了,新的引用如下:
<Reference Include="Microsoft.Windows.Design.Extensibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.Windows.Design.Interaction, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
Silverlight 3.0的 System.Windows还是需要引用。
3.最重要的一点:在MetadataRegistration中应添加如下声明,否则不起作用:
using System.ComponentModel;
[assembly: ProvideMetadata(typeof(MyTestControl.Design.MetadataRegistration))]
namespace MyTestControl.Design
{
public class MetadataRegistration : IProvideAttributeTable
....
}
4.目录结构改变:原来要求xxxx.xxxCtrl.DLL和xxxx.xxxCtrl.Design.DLL要放到同一目录下,现在是分目录存放,设计扩展DLL放在控件DLL同一目录的Design子目录下。
示例控件的源码下:MyTestControl.rar[不能上传附件???]