1.说明

之前做过一个小项目,点击按钮,按钮进入倒计时无效状态,计时完成后,恢复原样,现在就实现该效果---带倒计时的按钮

2.效果

1)正常状态               2)MouseOver(只有背景色变化)         3)点击进入无效状态

4)在无效状态下计时              5)恢复正常状态

3.XAML代码
 1 <!--冷却计时按钮样式-->
<!--通过修改颜色值参数,以更改按钮颜色样式,更多修改,还请自行DIY-->
<SolidColorBrush x:Key="ButtonForeground" Color="#FFF9FBFD"/>
<SolidColorBrush x:Key="RactangleFill" Color="#FF6EB3F7"/>
<SolidColorBrush x:Key="MouseOverFill" Color="#FF8CC3F9"/>
<SolidColorBrush x:Key="PressedFill" Color="#888CC3F9"/>
<SolidColorBrush x:Key="EnabledFill" Color="#FF6EB3F7"/>
<SolidColorBrush x:Key="EnabledOpacityMask" Color="#99FFFFFF"/> <!--总样式--> 2 <Style x:Key="TimerBtnStyle" TargetType="{x:Type Button}">
<Setter Property="FontSize" Value="14"/>
73         <Setter Property="Foreground" Value="{StaticResource ButtonForeground}"/>
3 <Setter Property="MinHeight" Value="25"/>
4 <Setter Property="Template">
5 <Setter.Value>
6 <ControlTemplate TargetType="{x:Type Button}">
7 <Grid>
8 <Rectangle x:Name="rectangle" Margin="0" StrokeThickness="0" Fill="{StaticResource RectangleFill}"/>
9 <ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" Margin="0" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
10 </Grid>
11 <ControlTemplate.Triggers>
12 <EventTrigger RoutedEvent="Button.Click">
13 <BeginStoryboard>
14 <Storyboard FillBehavior="Stop">
15 <StringAnimationUsingKeyFrames Storyboard.TargetProperty="(ContentPresenter.Content)" Storyboard.TargetName="contentPresenter">
16 <DiscreteStringKeyFrame KeyTime="0" Value="已提交"/>
17 <DiscreteStringKeyFrame KeyTime="0:0:1" Value="等待(30)"/>
18 <DiscreteStringKeyFrame KeyTime="0:0:2" Value="等待(29)"/>
19 <DiscreteStringKeyFrame KeyTime="0:0:3" Value="等待(28)"/>
20 <DiscreteStringKeyFrame KeyTime="0:0:4" Value="等待(27)"/>
21 <DiscreteStringKeyFrame KeyTime="0:0:5" Value="等待(26)"/>
22 <DiscreteStringKeyFrame KeyTime="0:0:6" Value="等待(25)"/>
23 <DiscreteStringKeyFrame KeyTime="0:0:7" Value="等待(24)"/>
24 <DiscreteStringKeyFrame KeyTime="0:0:8" Value="等待(23)"/>
25 <DiscreteStringKeyFrame KeyTime="0:0:9" Value="等待(22)"/>
26 <DiscreteStringKeyFrame KeyTime="0:0:10" Value="等待(21)"/>
27 <DiscreteStringKeyFrame KeyTime="0:0:11" Value="等待(20)"/>
28 <DiscreteStringKeyFrame KeyTime="0:0:12" Value="等待(19)"/>
29 <DiscreteStringKeyFrame KeyTime="0:0:13" Value="等待(18)"/>
30 <DiscreteStringKeyFrame KeyTime="0:0:14" Value="等待(17)"/>
31 <DiscreteStringKeyFrame KeyTime="0:0:15" Value="等待(16)"/>
32 <DiscreteStringKeyFrame KeyTime="0:0:16" Value="等待(15)"/>
33 <DiscreteStringKeyFrame KeyTime="0:0:17" Value="等待(14)"/>
34 <DiscreteStringKeyFrame KeyTime="0:0:18" Value="等待(13)"/>
35 <DiscreteStringKeyFrame KeyTime="0:0:19" Value="等待(12)"/>
36 <DiscreteStringKeyFrame KeyTime="0:0:20" Value="等待(11)"/>
37 <DiscreteStringKeyFrame KeyTime="0:0:21" Value="等待(10)"/>
38 <DiscreteStringKeyFrame KeyTime="0:0:22" Value="等待(09)"/>
39 <DiscreteStringKeyFrame KeyTime="0:0:23" Value="等待(08)"/>
40 <DiscreteStringKeyFrame KeyTime="0:0:24" Value="等待(07)"/>
41 <DiscreteStringKeyFrame KeyTime="0:0:25" Value="等待(06)"/>
42 <DiscreteStringKeyFrame KeyTime="0:0:26" Value="等待(05)"/>
43 <DiscreteStringKeyFrame KeyTime="0:0:27" Value="等待(04)"/>
44 <DiscreteStringKeyFrame KeyTime="0:0:28" Value="等待(03)"/>
45 <DiscreteStringKeyFrame KeyTime="0:0:29" Value="等待(02)"/>
46 <DiscreteStringKeyFrame KeyTime="0:0:30" Value="等待(01)"/>
47 <DiscreteStringKeyFrame KeyTime="0:0:31" Value="等待(00)"/>
48 </StringAnimationUsingKeyFrames>
49 <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.IsEnabled)">
50 <DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
51 <DiscreteBooleanKeyFrame KeyTime="0:0:32" Value="True"/>
52 </BooleanAnimationUsingKeyFrames>
53 </Storyboard>
54 </BeginStoryboard>
55 </EventTrigger>
56 <Trigger Property="IsFocused" Value="True"/>
57 <Trigger Property="IsDefaulted" Value="True"/>
58 <Trigger Property="IsMouseOver" Value="True">
59 <Setter Property="Fill" TargetName="rectangle" Value="{StaticResource MouseOverFill}"/>
60 </Trigger>
61 <Trigger Property="IsPressed" Value="True">
62 <Setter Property="Fill" TargetName="rectangle" Value="{StaticResource PressedFill}"/>
63 </Trigger>
64 <Trigger Property="IsEnabled" Value="False">
65 <Setter Property="Fill" TargetName="rectangle" Value="{StaticResource EnabledFill}"/>
66 <Setter Property="OpacityMask" TargetName="contentPresenter" Value="{StaticResource EnabledOpacityMask}"/>
67 </Trigger>
68 </ControlTemplate.Triggers>
69 </ControlTemplate>
70 </Setter.Value>
71 </Setter>
72 </Style>
4.应用
1 <Button Width="65" Content="提交请求" FontSize="14" Style="{StaticResource TimerBtnStyle}" />
5.总结

通过此代码,希望给初学者一些启示,有更多想法的同学,多多批评,不吝赐教。

文章来源:http://www.cnblogs.com/smlusm/p/3234463.html

[转]WPF自定义控件之带倒计时的按钮--Button的更多相关文章

  1. WPF自定义控件之带倒计时的按钮--Button

    1.说明 之前做过一个小项目,点击按钮,按钮进入倒计时无效状态,计时完成后,恢复原样,现在就实现该效果---带倒计时的按钮 2.效果 1)正常状态               2)MouseOver( ...

  2. WPF自定义控件与样式(2)-自定义按钮FButton

    一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...

  3. 【转】WPF自定义控件与样式(2)-自定义按钮FButton

    一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等 还是先看看效果图吧:   定义Button按钮名称叫FButton,主要是集成了 ...

  4. WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要针对WPF项目 ...

  5. WPF自定义控件与样式(14)-轻量MVVM模式实践

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. MVVM是WPF中一个非 ...

  6. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  7. WPF自定义控件与样式(1)-矢量字体图标(iconfont)

    一.图标字体 图标字体在网页开发上运用非常广泛,具体可以网络搜索了解,网页上的运用有很多例子,如Bootstrap.但在C/S程序中使用还不多,字体图标其实就是把矢量图形打包到字体文件里,就像使用一般 ...

  8. WPF自定义控件与样式(15)-终结篇 & 系列文章索引 & 源码共享

    系列文章目录  WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与样式(3)-TextBox & Ric ...

  9. WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Che ...

随机推荐

  1. docker-compose安装及docker-compose.yml详解

    1.下载安装 [root@cx-- ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-comp ...

  2. npm run server报错

    从git上clone的vue项目npm install后npm run server报错 $ npm run dev > lufei@1.0.0 dev E:\pythonProject\luf ...

  3. Responder对象

    Responder对象 响应者是一个对象,它可以响应事件并处理它们.所有响应者对象是类的,最终从UIResponder的( IOS)或NSResponder ( OS X)继承实例.这些类声明一个编程 ...

  4. python的起源及基本语句

    一.Python的起源 Python是吉多范罗苏姆于1989年的圣诞节期间在阿姆斯特丹进行编写的,于1991年编写完成,Python是一门解释型弱类型的编程语言. Python在多个领域中都有应用,比 ...

  5. ubuntu常见错误–Could not get lock /var/lib/dpkg/lock解决

    ubuntu常见错误–Could not get lock /var/lib/dpkg/lock解决     通过终端安装程序sudo apt-get install xxx时出错:     E: C ...

  6. AQS(队列同步器)

    目录导引: 一.简介 二.源码解析(JDK8) 三.运用示例 一.简介 1.volatile volatile修饰的共享变量可以保证可见性和有序性(禁止指令重排序). 2.CAS: CAS的原理很简单 ...

  7. <jquery>滚动例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. [JZOJ1320] 【Usaco2009 gold 】拯救奶牛

    题目 题目大意 一个三角形的网格图,三角形与其有共同边的三角形相连. 起点到所有终点的最短距离. 思考历程 数据看起来还挺大的,所以不是什么图论算法. 这显然是一个结论题. 什么结论? 然后我就开始推 ...

  9. logger----->模块级别的函数

    #_author:star#date:2019/11/6#logger----->模块级别的函数#文件与屏幕同时显示日志信息import logginglogger=logging.getLog ...

  10. python 编程 一次错误记录 -1073740791

    原因是发生在我错把类当做实例化对象使用了