Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4960087
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: 嵌入式

2010-10-26 21:55:37

Silverlight中可以通过样式来改变控件的颜色,大小等。但是这些属性只能简单的改变控件的外观,如果想更灵活的改变控件的属性,那么就需要通过Silverlight的模板。

1.在样式中定义模板
控件的模板也是样式中的一个属性,在定义控件模板时和其他属性相同。如

  1. <Style x:Key="btnStyle" TargetType="Button"> 
  2.            <Setter Property="Template"> 
  3.                <Setter.Value> 
  4.                    <ControlTemplate TargetType="Button"> 
  5.                        <Grid x:Name="RootElement"> 
  6.                            <Rectangle Width="100" Height="40" RadiusX="25" RadiusY="25" Fill="AliceBlue"> 
  7.                            Rectangle> 
  8.                            <TextBlock Text="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
  9.                        Grid> 
  10.                    ControlTemplate> 
  11.                Setter.Value> 
  12.            Setter> 
  13.        Style> 

控件引用

  1. <Button Style="{StaticResource btnStyle}" Width="100" Height="100" Background="Red" Content="提交" Foreground="Black" >Button> 

效果图

2.单独定义模板

  1. <ControlTemplate x:Key="btnStyle" TargetType="Button"> 
  2.             <Grid x:Name="RootElement"> 
  3.                 <Ellipse Width="200" Height="80"> 
  4.                     <Ellipse.Fill> 
  5.                         <LinearGradientBrush StartPoint="0,0"> 
  6.                             <GradientStop Color="#FFFFFF" Offset="0.0" /> 
  7.                             <GradientStop Color="#EC04FA" Offset="1.0" /> 
  8.                         LinearGradientBrush> 
  9.                     Ellipse.Fill> 
  10.                     <Ellipse.Stroke> 
  11.                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
  12.                             <GradientStop Color="#FCB2FD" Offset="0" /> 
  13.                             <GradientStop Color="#FFFFFF" Offset="1" /> 
  14.                         LinearGradientBrush> 
  15.                     Ellipse.Stroke> 
  16.                 Ellipse> 
  17.                 <TextBlock Text="Hello World" FontSize="26" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
  18.             Grid> 
  19.         ControlTemplate> 

单独定义模板通过ControlTemplate来定义,和样式相同也需要声明模板名称和目标类型,控件引用单独模板时候通过Template属性。
控件引用

  1. <Button  Template="{StaticResource btnStyle}" Content="Hello World">Button> 

效果

3.控件内部模板
控件可以单独在自己内部定义模板,如

  1. <Button Content="Hello World"> 
  2.            <Button.Template> 
  3.                <ControlTemplate> 
  4.                    <Grid> 
  5.                        <Ellipse Width="200" Height="200" Fill="Orange"> 
  6.                        Ellipse> 
  7.                     <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center">ContentPresenter> 
  8.                    Grid> 
  9.                ControlTemplate> 
  10.            Button.Template> 
  11.        Button> 

效果

在控件模板中定义了控件的显示文字,大小,颜色等属性的的时候,应用了模板的控件本身的属性会被忽略掉。可以通过{TemplateBinding ControlProperty}标签来重新设定。

  1. <Style x:Key="btnStyle" TargetType="Button"> 
  2.             <Setter Property="Template"> 
  3.                 <Setter.Value> 
  4.                     <ControlTemplate TargetType="Button"> 
  5.                         <Grid x:Name="RootElement"> 
  6.                             <Rectangle Width="100" Height="40" RadiusX="25" RadiusY="25" Fill="AliceBlue"> 
  7.                             Rectangle> 
  8.                             <TextBlock Text="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
  9.                         Grid> 
  10.                     ControlTemplate> 
  11.                 Setter.Value> 
  12.             Setter> 
  13.         Style> 
  14.  
  15.  
  16.         <Style x:Key="btnTemplateStyle" TargetType="Button"> 
  17.             <Setter Property="Template"> 
  18.                 <Setter.Value> 
  19.                     <ControlTemplate TargetType="Button"> 
  20.                         <Grid x:Name="RootElement"> 
  21.                             <Rectangle Width="100" Height="40" RadiusX="25" RadiusY="25" Fill="AliceBlue"> 
  22.                             Rectangle> 
  23.                             <TextBlock Text="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
  24.                         Grid> 
  25.                     ControlTemplate> 
  26.                 Setter.Value> 
  27.             Setter> 
  28.         Style> 

控件引用

  1. <Button Style="{StaticResource btnStyle}" Width="100" Height="100"  Content="Hello" >Button> 
  2.   <Button Style="{StaticResource btnTemplateStyle}" Width="100" Height="100"  Content="World" >Button> 

效果

第一个模板中的TextBlock的Text属性没有引用{TemplateBinding ControlProperty}标签,因此在第一个Button中显示的内容仍然是模板中定义的。
第二个模板中的TextBlock的Text属性引用了此标签,因此在第二个Button中显示的内容是Button自己定义的。

阅读(1666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~