资源描述
首先打开 Microsoft Visual Studio 2008 ,新建一个WPF项目,在上面随便放几个按钮:
WPF_Button1.png(4.31 K)
2008-7-15 13:40:47
然后给各个按钮设置不同的背景颜色:
WPF_Button2.png(16.98 K)
2008-7-15 13:40:47
设置好之后就是这样啦:
WPF_Button3.png(7.58 K)
2008-7-15 13:40:47
然后我们就开始在 App.xaml 文件中定义按钮样式了:
WPF_Button4.png(19.99 K)
2008-7-15 13:40:47
定义的样式代码如下:
1. <Application x:Class="WPFButton.App"
2. xmlns="
3. xmlns:x="
4. StartupUri="Window1.xaml">
5. <Application.Resources>
6. <!--定义按钮样式-->
7. <Style TargetType="Button">
8. <Setter Property="Foreground" Value="Black"/>
9. <!--修改模板属性-->
10. <Setter Property="Template">
11. <Setter.Value>
12. <!--控件模板-->
13. <ControlTemplate TargetType="Button">
14. <!--背景色-->
15. <Border x:Name="back" Opacity="0.8" CornerRadius="3">
16. <Border.BitmapEffect>
17. <OuterGlowBitmapEffect Opacity="0.7" GlowSize="0" GlowColor="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Button.Background).(SolidColorBrush.Color)}" />
18. </Border.BitmapEffect>
19. <Border.Background>
20. <LinearGradientBrush StartPoint="0,0" EndPoint="0,1.5">
21. <GradientBrush.GradientStops>
22. <GradientStopCollection>
23. <GradientStop Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Button.Background).(SolidColorBrush.Color)}" Offset="0"/>
24. <GradientStop Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Button.Background).(SolidColorBrush.Color)}" Offset="0.4"/>
25. <GradientStop Color="#FFF" Offset="1"/>
26. </GradientStopCollection>
27. </GradientBrush.GradientStops>
28. </LinearGradientBrush>
29. </Border.Background>
30. <!--前景色及边框-->
31. <Border x:Name="fore" BorderThickness="1" CornerRadius="3" BorderBrush="#5555">
32. <Border.Background>
33. <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
34. <GradientBrush.GradientStops>
35. <GradientStopCollection>
36. <GradientStop Color="#6FFF" Offset="0.5"/>
37. <GradientStop Color="#1111" Offset="0.51"/>
38. </GradientStopCollection>
39. </GradientBrush.GradientStops>
40. </LinearGradientBrush>
41. </Border.Background>
42. <!--按钮内容-->
43. <ContentPresenter x:Name="content" Horiz VerticalAlignment="Center" C>
44. <ContentPresenter.BitmapEffect>
45. <DropShadowBitmapEffect Color="#000" Direction="-90" ShadowDepth="2" Softness="0.1" Opacity="0.3" />
46. </ContentPresenter.BitmapEffect>
47. </ContentPresenter>
48. </Border>
49. </Border>
50. <!--触发器-->
51. <ControlTemplate.Triggers>
52. <!--鼠标移入移出-->
53. <Trigger Property="IsMouseOver" Value="True">
54. <Trigger.EnterActions>
55. <BeginStoryboard>
56. <Storyboard>
57. <DoubleAnimation To="6" Duration="0:0:0.2" Storyboard.TargetName="back" Storyboard.TargetProperty="(Border.BitmapEffect).(OuterGlowBitmapEffect.GlowSize)" />
58. <ColorAnimation To="#AFFF" BeginTime="0:0:0.2" Duration="0:0:0.2" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" />
59. <ColorAnimation To="#3FFF" BeginTime="0:0:0.2" Duration="0:0:0.2" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" />
60. </Storyboard>
61. </BeginStoryboard>
62. </Trigger.EnterActions>
63. <Trigger.ExitActions>
64. <BeginStoryboard>
65. <Storyboard>
66. <DoubleAnimation Duration="0:0:0.2" Storyboard.TargetName="back" Storyboard.TargetProperty="(Border.BitmapEffect).(OuterGlowBitmapEffect.GlowSize)" />
67. <ColorAnimation Duration="0:0:0.2" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" />
68. <ColorAnimation Duration="0:0:0.2" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" />
69. </Storyboard>
70. </BeginStoryboard>
71. </Trigger.ExitActions>
72. </Trigger>
73. <!--按钮按下弹起-->
74. <Trigger Property="IsPressed" Value="True">
75. <Trigger.EnterActions>
76. <BeginStoryboard>
77. <Storyboard>
78. <DoubleAnimation To="3" Duration="0:0:0.1" Storyboard.TargetName="back" Storyboard.TargetProperty="(Border.BitmapEffect).(OuterGlowBitmapEffect.GlowSize)" />
79. <ColorAnimation To="#3AAA" Duration="0:0:0.1" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" />
80. <ColorAnimation To="#2111" Duration="0:0:0.1" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" />
81. </Storyboard>
82. </BeginStoryboard>
83. </Trigger.EnterActions>
84. <Trigger.ExitActions>
85. <BeginStoryboard>
86. <Storyboard>
87. <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="back" Storyboard.TargetProperty="(Border.BitmapEffect).(OuterGlowBitmapEffect.GlowSize)" />
88. <ColorAnimation Duration="0:0:0.1" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" />
89. <ColorAnimation Duration="0:0:0.1" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" />
90. </Storyboard>
91. </BeginStoryboard>
92. </Trigger.ExitActions>
93. </Trigger>
94. <!--按钮失效-->
95. <Trigger Property="IsEnabled" Value="False">
96. <Setter Property="Foreground" Value="#B444"/>
97. <Trigger.EnterActions>
98. <BeginStoryboard>
99. <Storyboard>
100. <DoubleAnimation To="0" Duration="0:0:0.3" Storyboard.TargetName="back" Storyboard.TargetProperty="(Border.BitmapEffect).(OuterGlowBitmapEffect.GlowSize)" />
101. <DoubleAnimation To="1" Duration="0:0:0.1" Storyboard.TargetName="content" Storyboard.TargetProperty="(ContentPresenter.BitmapEffect).(DropShadowBitmapEffect.Opacity)" />
102. <DoubleAnimation To="-135" Duration="0:0:0.1" Storyboard.TargetName="content" Storyboard.TargetProperty="(ContentPresenter.BitmapEffect).(DropShadowBitmapEffect.Direction)" />
103. <ColorAnimation To="#FFF" Duration="0:0:0.3" Storyboard.TargetName="content" Storyboard.TargetProperty="(ContentPresenter.BitmapEffect).(DropShadowBitmapEffect.Color)" />
104. <ColorAnimation To="#D555" Duration="0:0:0.3" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" />
105. <ColorAnimation To="#CEEE" Duration="0:0:0.3" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" />
106. <ColorAnimation To="#CDDD" Duration="0:0:0.3" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" />
107. </Storyboard>
108. </BeginStoryboard>
109. </Trigger.EnterActions>
110. <Trigger.ExitActions>
111. <BeginStoryboard>
112. <Storyboard>
113. <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="back" Storyboard.TargetProperty="(Border.BitmapEffect).(OuterGlowBitmapEffect.GlowSize)" />
114. <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="content" Storyboard.TargetProperty="(ContentPresenter.BitmapEffect).(DropShadowBitmapEffect.Opacity)" />
115. <DoubleAnimation Duration="0:0:0.1" Storyboard.TargetName="content" Storyboard.TargetProperty="(ContentPresenter.BitmapEffect).(DropShadowBitmapEffect.Direction)" />
116. <ColorAnimation Duration="0:0:0.1" Storyboard.TargetName="content" Storyboard.TargetProperty="(ContentPresenter.BitmapEffect).(DropShadowBitmapEffect.Color)" />
117. <ColorAnimation Duration="0:0:0.1" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" />
118. <ColorAnimation Duration="0:0:0.1" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)" />
119. <ColorAnimation Duration="0:0:0.1" Storyboard.TargetName="fore" Storyboard.TargetProperty="(Border.Background).(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)" />
120. </Storyboard>
121. </BeginStoryboard>
122. </Trigger.ExitActions>
123. </Trigger>
124. </ControlTemplate.Triggers>
125. </ControlTemplate>
126. </Setter.Value>
127. </Setter>
128. </Style>
129. </Application.Resources>
130. </Application>
复制代码
看了先不要头大,我们先看看最终效果,然后回过头来再解释代码:
WPF_Button5.png(11.38 K)
2008-7-15 13:40:47
这是常规样式
WPF_Button6.png(16.25 K)
2008-7-15 13:40:47
这个是鼠标移到上面时的样式
WPF_Button7.png(15.85 K)
2008-7-15 13:40:47
这个是鼠标点击时的样式
WPF_Button8.png(18.79 K)
2008-7-15 13:40:47
还有就是按钮失效时的样式
效果还算不错吧,下面来讲解代码喽,头晕的同学可以现在就收拾东西回家了哈。
WPF_Button9.png(27.65 K)
2008-7-15 13:40:47
我们先来看这个命名为“back”的 Border 元素,它用它的 Background 属性充当了整个按钮的背景色。
1. <Border.Background>
2. <LinearGradientBrush StartPoint="0,0" EndPoint="0,1.5">
3. <GradientBrush.GradientStops>
4. <GradientStopCollection>
5. <GradientStop Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Button.Background).(SolidColorBrush.Color)}" Offset="0"/>
6. <GradientStop Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Button.Background).(SolidColorBrush.Color)}" Offset="0.4"/>
7. <GradientStop Color="#FFF" Offset="1"/>
8. </GradientStopCollection>
9. </GradientBrush.GradientStops>
10. </LinearGradientBrush>
11. </Border.Background>
复制代码
其背景所用的是一个渐变笔刷,起始值和中间值都是引用的按钮本身的背景色,就是我们之前设置过的颜色啦,终止值是白色,这样通过位置调整,我们可以在按钮最下部产生一些向白色的过度色彩效果。
1. <Border.BitmapEffect>
2. <OuterGlowBitmapEffect Opacity="0.7" GlowSize="0" GlowColor="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Button.Background).(SolidColorBrush.Color)}" />
3. </Border.BitmapEffect>
复制代码
它的 BitmapEffect 属性我们设置了一个大小为 0 的外发光效果,平常是看不见这效果的,在这里预先设置好,是为了在鼠标移入、按下时实现动画使用。
WPF_Button10.png(20.28 K)
2008-7-15 13:40:47
再来看看这个命名为“fore”的 Border 元素,它实现的是按钮的边框和高亮反光效果,我为它设置了一个半透明的黑色1像素边框,使得这个边框的色彩可以和背景色混合起来。
1. <Border.Background>
2. <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
3. <GradientBrush.GradientStops>
4.
展开阅读全文