在Silverlight类库项目中创建模板化控件

来源:互联网 发布:bizhub7622 连接端口 编辑:程序博客网 时间:2024/04/20 03:42
 

我们通常会自定义Silverlight控件,来实现各种绚丽多彩的效果。把自定义的控件放入类库项目中,生成dll文件,使得这些控件能够在其他项目中进行重用。但是在类库项目中创建控件经常会遇到一些问题,使得在自定义控件的过程中感觉困难重重。例如我想自定义一个ListBox控件MyListBox,该控件继承于ListBox。当我们在类库项目中添加好一个类MyListBox.cs后,再想去定义该控件的模板或样式时,感觉手足无措。因为单独添加一个类并没有像添加一个用户控件那样,伴随着添加一个.xaml文件(提供给用户进行控件的显示设计);而且类库项目中没有App.xaml,不能在App.xaml中直接编写资源字典或者合并资源字典,也就不能在MyListBox.cs直接调用资源字典的样式。

可以在类库项目中添加Silverlight模板化控件来实现,添加一个模板化控件MyListBox后,项目自动添加MyListBox.cs类文件和一个包含Generic.xaml文件的文件夹(名称为Themes)。Generic.xaml是一种用于控件的特殊实现技术,通常合并 ResourceDictionary。可以在Generic.xaml中添加样式,来定义MyListBox的模板,MyListBox将自动使用Generic中的模板。但需要注意,Generic.xaml中样式的TargetType必须是MyListBox。

另外创建模板化控件经常要使用一个神器TemplateBinding,它可以将控件模板中的属性的值链接到在模板化控件上公开的某个其他属性的值。这是最厉害的地方,使用TemplateBinding,就不用像使用Binding那样为寻找一个DataContext而感觉难受,也不用去调用一个GetTemplateChild而伤透脑筋。只用一个TemplateBinding,Generic.xaml中模板的属性值就与MyListBox.cs中的属性的值链接起来,使得自定义控件编写变得方便,效果更加灵动。
原创粉丝点击