0603模板触发器与数据模板
1、不需要名称指定
ContentPresenter是可以不需要名称的x:Name="contentPresenter"

做一些公用的样式处理也可以不写ContentPresenter
2、 不同按钮可以引用不同的模板
可以自定义
<ControlTemplate TargetType="Button" x:Key="buttonTemp">

通过属性Template指定 Template="{StaticResource buttonTemp}"
![]()
也可以根据某个属性进行配置,1,2,3其实没什么意义,直接写Template就行
3、触发器
文字1的时候显示出来,0的时候隐藏
添加Tag标签属性,在Trigger里面针对属性操作

4、直角改圆角
<ControlTemplate TargetType="Button" x:Key="buttonTemp"> <Border CornerRadius="5" BorderThickness="2" BorderBrush="Red"> </Border> </ControlTemplate>
所有引用的地方都会生效 Template="{StaticResource buttonTemp}"
5、什么控件有 Template属性?

Template定义在Control下面
FrameworkElement : UIElement
Control : FrameworkElement
ContentControl : Control
ButtonBase : ContentControl
Button : ButtonBase
只要继承自Control的就一定有Template属性

TextBlock : FrameworkElement
就没有 Template,并不能称之为一个控件,只能是一个元素
控件模版主要是针对于控件的显示
6、TemplateBinding
怎么把父控件属性从外面传递到模板内部处理
<Button Content="Zys" Width="120" Height="80" Template="{StaticResource buttonTemp}" Tag="按钮文本">
通过数据传输纽带Tag
<TextBlock Text="{TemplateBinding Tag}" Grid.Row="1" />
<Window.Resources> <ControlTemplate TargetType="Button" x:Key="buttonTemp"> <Border CornerRadius="5" BorderThickness="2" BorderBrush="Red" Background="{TemplateBinding Background}" Name="border"> <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <ContentPresenter Name="txt"/> <TextBlock Grid.Row="1" Text="{TemplateBinding Tag}" FontSize="20" Foreground="Red"/> </Grid> </Border> </ControlTemplate> </Window.Resources> <Grid> <Button Content="hello" Width="100" Height="100" Template="{DynamicResource buttonTemp}" Tag="Tag文字"/> </Grid>
也可以绑定 Background="{TemplateBinding Background}"
TextBox默认白色会遮挡,可以设置为透明色Background="Transparent"
方向,从控件到模板
反方向操作 只是临时性的,比如鼠标滑动改变颜色,不会写到控件里去
7、其它占位
ContentPresenter、内容占位
集合占位
ltemsPresenter、
ScrollContentPresenter

这样的图,可以修改进度条模板
还有水波纹环形动画效果
浙公网安备 33010602011771号