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

本文深入探讨了在Silverlight类库项目中自定义控件的过程,包括如何通过模板化控件实现控件的样式定制,以及如何利用TemplateBinding简化属性链接操作,使自定义控件的编写更加便捷。
 

我们通常会自定义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中的属性的值链接起来,使得自定义控件编写变得方便,效果更加灵动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值