在开发过程中,我们有时候用WPF原生的控件就能实现自己的需求,但是样式、风格并不能 满足我们的需求,还有很多独特的样式预计风格,我们该怎么办呢?我们需要我们通过不同的代码形式以及样式去进行,将控件进行不同的封装,然后在调用。那么将要怎么运用呢?自定义样式与模板。
一、样式
在WPF中我们可以使用Style来设置控件的某些属性值,并且使该设置影响到指定范围内的所有该类控件或影响指定的某一控件,比如说我们想将窗口中的所有按钮都保持某一种风格,那么我们可以设置一个Style,而不必分别设置每个按钮的风格。同时在后面需要运用到这种控件的时候,我们不需要在重新打样式,可以直接通过调用前面定义的这个控件方法来进行应用,这样操作起来就方便很多了,可以节省很多的代码。Style是作为一种资源被保存下来的.哪里需要运用到它就可以通过代码来对这个控件进行调用。 如下面就是一个控件的例子:
<Style x:Key="style1" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Skyblue" />
<Setter Property="FontSize" Value="18" />
<Setter Property="FontFamily" Value="Verdena" />
<Setter Property="FontWeight" Value="Bold" />
</Style>
如果我们希望需要更有意义,更加让人感到的激动的样式是,我们可以定义一个动态样式,动态样式可以使画面根据你想的形状进行变化,这是可以通过在style的和面添加一个trigger:来实现动态的功能。
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
我们可以对动画背景进行一个填充色彩:方法如下:
<Canvas.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF10F093" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
<GradientStop Color="#FF8DD0CF" Offset="0.494"/>
<GradientStop Color="#FFBB8CD3" Offset="0.99"/>
</LinearGradientBrush>
</Canvas.Background>
二、模板
ControlTemplate 指定控件的可视结构和可视行为。可以通过为控件指定 新 ControlTemplate 自定义该控件的外观。创建 ControlTemplate 后,可以在不更改现有控 件的功能的情况下更改其外观。例如,您可以将应用程序中的按钮设置为圆形,而不是默认 的方形,但该按钮仍将引发 Click 事件。 注意: 在重定义模板前,你应该充分了解该空间的 模板类型
定义模板的方法有三种:
- 内联定义:
<Button Content="Button1">
<Button.Template>
<ControlTemplate TargetType="Button">
<! ‐‐Define the ControlTemplate here.‐‐>
</ControlTemplate>
</Button.Template>
</Button>
- 定义为资源:
<StackPanel>
<StackPanel.Resources>
<ControlTemplate TargetType="Button" x:Key="newTemplate">
<! ‐‐Define the ControlTemplate here.‐‐>
</ControlTemplate>
</StackPanel.Resources>
<Button Template="{StaticResource newTemplate}" Content="Button1"/>
</StackPanel>
- 通过Style定义:
<StackPanel>
<StackPanel.Resources>
<Style TargetType="Button" x:Key="newTemplate">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<! ‐‐Define the ControlTemplate here.‐‐>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<Button Style="{StaticResource newTemplate}" Content="Button1"/>
</StackPanel>