如果自定义TabItem呢
我画一个矩形,然后构成控件,选TabItem,确定
再在画板上拉一个TabControl出来,选中一个TabItem,选择编辑模板==>应用资源,选择刚才生成的TabItemStyle1
报错:引发了异常,值不在预期的范围内
我比较了一下,默认的TabItem包含header和一个grid;而我自定义的tabitem是没有那个grid;可能是因为这个原因报错吧
应该怎么做呢
[解决办法]
对象时间线里:控件的主要组成部分。
template--》定义模板开始
Root-->控件布局的根控件
TemplateTopSelected---》位置在上方时Tabitem选中时的样式
Border---》位置上方时Tabitem主要样式,控制了header,背景,前景等
FocusVisualTop---》当鼠标移动时显示的一部分效果
DisabledVisualTopSelected---》Tabitem不可用状态的效果
TemplateTopUnSelected---》位置在上方时Tabitem未选中时的样式
Border。。。同上
状态:
Normal---》正常状态下界面效果
MouseOver---》鼠标移上效果
......
UnSelected---》未选中效果
Selected ---》选中效果
当选择某个State来查看状态时,可以看到对象时间线的某些控件会有个红点,说明在这个状态下这个控件做了些改变,展开可以看到是哪个属性在这个状态下发生了变化。如选择MouserOver状态可以看到FocusVisualTop项上多个红点,展开可以看到是其Opacity属性发生了变化。
修改样式时可以先不管State部分,也就是先只修改Normal下的样式,改好后再去考虑实现State部分,也就是xaml里的VisualStateManager部分。
在Tabitem里主要的样式控制是Border那个部分,组成如下。修改背景颜色,只需要改变两个Border和Rectangle的Background属性;修改形状,最外层的那个Border的CornerRadius="3,3,0,0"是控制其左上角和右上角的弧度的。修改完毕以后,开始处理State部分,由于变化不大可以直接修改xaml代码的VisualStateManager部分,变下相应的颜色就行。
<Border ...
<Border ...
<Grid ...
<Rectangle ....
<ContentControl x:Name="HeaderTopSelected" ... //Header显示控件
</Grid>
</Border>
</Boder>