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. GCRoots 对象

    GC Roots 虚拟机栈(栈帧中的本地变量表)中引用的对象 方法区中的类静态属性引用的对象 方法区中的常量引用的对象 原生方法栈(Native Method Stack)中 JNI 中引用的对象 可 ...

  2. 应用上云新模式,Aliware 全家桶亮相杭州云栖大会

    全面上云带来的变化,不仅是上云企业数量上的攀升,也是企业对云的使用方式的转变,越来越多的企业用户不仅将云作为一种弹性资源,更是开始在云上部署架构和应用,借助 Serverless 等技术,开发人员只需 ...

  3. thinkphp 运算符

    我们可以对模板输出使用运算符,包括对“+”“ –” “*” “/”和“%”的支持. 大理石平台厂家 例如: 运算符 使用示例 + {$a+$b} - {$a-$b} * {$a*$b} / {$a/$ ...

  4. 异或+桶——cf768C

    有个结论是到最后肯定出现循环节..感觉这种做法有点歪 正解当然是题解啦 虽然到了1e8,但是cf上还是能过的 #include<bits/stdc++.h> #define rep(i,s ...

  5. python相关软件安装流程图解——虚拟机安装——CentOS-7-x86_64-DVD-1810——CentOS-01下载——CentOS-02安装——CentOS-03配置操作

    http://www.xitongzhijia.net/soft/24315.html http://www.downxia.com/downinfo/4574.html     .

  6. golang中net/http包的简单使用

    一.介绍 http包提供了http客户端和服务端的实现 Get,Head,Post和PostForm函数发出http.https的请求 程序在使用完回复后必须关闭回复的主体 #简单的访问网站,由于没有 ...

  7. svg实现渐变进度圆环

    效果图 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="ut ...

  8. Linux和Windows下ping命令详解

    转:http://linux.chinaitlab.com/command/829332.html 一.Linux下的ping参数 用途 发送一个回送信号请求给网络主机. 语法 ping [ -d] ...

  9. 尚学linux课程---10、linux环境下安装python

    尚学linux课程---10.linux环境下安装python 一.总结 一句话总结: 直接在官网下载python的源码包即可,然后在linux下安装 linux下安装软件优先想到的的确是yum,但是 ...

  10. c# 中Linq Lambda 的ToLookup方法的使用

    同样直接上代码: List<Student> ss = new List<Student>(); Student ss1 = , Age = , Name = " } ...