首页 > 代码库 > 控件模板学习笔记(二)
控件模板学习笔记(二)
1.模板绑定TemplateBinding
什么情况下使用模板绑定?
--当您仍可能想要使用公共属性更改控件的外观时,模板绑定是您的不二之选
怎么使用模板绑定?
--我们还以学习笔记一中的Button为例,自定义模板中的Border的Background=“Red”,使用TemplateBinding则为Background=“{TemplateBinding Backbround}”;
等号左边的Background为Border的背景颜色,等号右边的Background为Button的属性。
使用模板绑定能够解决什么样的问题?
--当多个按钮呈现的可视化结构相同,只是背景颜色或是边框颜色不一样时,如果不使用TemplateBinding,可能您就要为每一个按钮定义一个控件模板,这些控件模板相差的
也许只是一个属性。所以为了解决这种情况我们可以使用TemplateBinding,示例如下:
<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}"> <Border Name="Border" BorderBrush="Orange" BorderThickness="3" CornerRadius="2" Background="{TemplateBinding Background}" TextBlock.Foreground="White" SnapsToDevicePixels="True"> <Grid> <Rectangle Name="FocusCue" Visibility="Hidden" Stroke="Black" StrokeThickness="1" StrokeDashArray="1 2" SnapsToDevicePixels="True"></Rectangle> <ContentPresenter RecognizesAccessKey="True" Margin="{TemplateBinding Padding}"></ContentPresenter> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="Border" Property="Background" Value="DarkRed" /> </Trigger> <Trigger Property="IsPressed" Value="true"> <Setter TargetName="Border" Property="Background" Value="IndianRed" /> <Setter TargetName="Border" Property="BorderBrush" Value="DarkKhaki" /> </Trigger> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter TargetName="FocusCue" Property="Visibility" Value="Visible" /> </Trigger> </ControlTemplate.Triggers></ControlTemplate>
<Button Content="ButtonA" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Background="Red" Template="{StaticResource ButtonTemplate}" /><Button Content="ButtonB" HorizontalAlignment="Left" Margin="10,47,0,0" VerticalAlignment="Top" Width="75" Background="Green" Template="{StaticResource ButtonTemplate}" />
效果如图:
2.自动应用模板
自动应用模板是不设置Template=“{StaticResource ButtonTemplate}”时,项目中的按钮自动应用定义好的控件模板。
怎么实现自动应用模板?
--技巧是使用类型样式,这种样式会自动影响相应的元素类型并设置Template属性,示例如下:
<Style TargetType="{x:Type Button}"> <Setter Property="Control.Template" Value="{StaticResource ButtonTemplate}" /></Style>
注:虽然在Resources里定义,但是没有定义x:Key属性。其中的ButtonTemplate为学习笔记一中定义的控件模板
<Button Content="ButtonA" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" /><Button Content="ButtonB" HorizontalAlignment="Left" Margin="10,75,0,0" VerticalAlignment="Top" Width="75" />
效果如图:,其实从工具箱里新添加一个按钮也会自动应用该控件模板,只是现在我还不会制作和上传Gif类型的文件,没办法贴效果图。
控件模板学习笔记(二)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。