WPF包含数据模板和控件模板,其中控件模板又包括ControlTemplate和ItemsPanelTemplate,这里讨论一下ControlTemplate。
其实WPF的每一个控件都有一个默认的模板,该模板描述了控件的外观以及外观对外界刺激所做出的反应。我们可以自定义一个模板来替换掉控件的默认模板以便打造个性化的控件。与Style不同,Style只能改变控件的已有属性值(比如颜色字体)来定制控件,但控件模板可以改变控件的内部结构(VisualTree,视觉树)来完成更为复杂的定制,比如我们可以定制这样的按钮:椭圆与渐变色相结合。
<UserControl x:Class="SilverlightApplication1.style2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <!--如何给一个控件加不同的样式:用现有的资源(Grid,Ellipse,GradientStop。。。。)定义一个样式--> <UserControl.Resources> <Style x:Key="mybutton" targettype="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate targettype="Button" > <Grid Cursor="Hand" Margin="20"> <Ellipse Width="150" Height="100" HorizontalAlignment="Center" VerticalAlignment="Center"> <Ellipse.Fill> <RadialGradientBrush> <GradientStop Color="Gold" Offset="1"></GradientStop> <GradientStop Color="White" Offset="0"></GradientStop> </RadialGradientBrush> </Ellipse.Fill> </Ellipse> <TextBlock Text="{TemplateBinding Content}" FontSize="24" Foreground="Blue" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </UserControl.Resources> <!--调用样式模板--> <Grid x:Name="LayoutRoot" Background="White"> <StackPanel Width="400" Height="300" HorizontalAlignment="Center" Orientation="Horizontal" VerticalAlignment="Center" Background="White"> <Button Style="{StaticResource mybutton}" Content="my template"></Button> <Button Style="{StaticResource mybutton}" Content="54546565"></Button> </StackPanel> </Grid></UserControl>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。