总结一下Silverlight里Template,ContentTemplate,ItemTemplate和Content属性的区别

本文探讨Silverlight中Template、ContentTemplate、ItemTemplate和Content属性的区别。以Button为例,ContentControl的Template用于定义控件外观和行为,DataTemplate的ContentTemplate用于不改变行为的控件内容修改,而Content属性限制于放置Object类型。ContentPresenter和ItemsPresenter作为占位符确定内容在控件中的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Silverlight开发的人总会碰到修改控件样式的问题,但是如果如题所述的几个重要概念不清楚,就会导致思路的混乱,以及无法实现自己的要求。呵呵,我就是这样啦,哈;因此我花费了一些时间总结了一下我的理解,如果有错误的地方也希望高手能指正一下吧。

以Button为例,从类的继承关系上看,它继承ButtonBase,而ButtonBase又继承了ContentControl类,这个类是比较重要的,ContentControl类用于包含单项内容的控件,呵呵,它有个类似的哥们ItemsControl类(用于显示多个项的控件)。说它们重要,是因为如果我们想重新定义一个控件外观和行为时,会使用到那个控件的Template属性,这个属性是Control类的属性,大部分控件都直接或间接继承它,也就是说大部分控件都会存在这个Template属性。看看它的返回类型,ControlTemplate类,和ContentTemplate属性很相似的,我开始就是被它们给骗了,呵呵。在这个Template里,你需要定义VisualStateGroups(状态组),VisualState(状态),复杂的还有VisualTransition(状态之间的过度),以及我们想设计的外观布局。

  再来说说ContentTemplate属性,这个属性是ContentControl类的属性,其返回类型是DataTemplate类,它主要用于不改变控件行为的基础上,进行控件内容的修改,例如在Button控件里要加入一个CheckBox控件时,就要考虑使用Button的ContentTemplate属性了。ItemsControl类的ItemTemplate属性与它的作用很相似,只是显示形式不同。

<Button Width="94" Height="30">
    <Button.ContentTemplate>
    	<DataTemplate>
            <CheckBox Content="Hello" />
	</DataTemplate>
    </Button.ContentTemplate>	
</Button>

  Content属性也是ContentControl类的属性,其返回类型是Object类,开始我以为它可以放一些控件在里面,例如TextBlock,TextBox等,但是当我想加入上例的CheckBox时就不被允许了。因此从这个角度来看,Template属性的能力 > ContentTemplate/ItemTemplate属性的能力 > Content属性的能力。

最后看看ContentPresenter类和ItemsPresenter类,它们有点像创建控件时使用的占位符,例如我们想让这个控件的内容部分应该放置到哪里,由于创建控件时我们没法提前知道内容是什么,是文字还是一个集合控件,所以就需要它们来确认一下内容在创建控件中的位置,而不必考虑具体是什么内容以及形式了。

  写得有点乱,呵呵,日后有时间上传些图片说明一下吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值