[转]WPF自定义控件之带倒计时的按钮--Button
| 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的更多相关文章
- WPF自定义控件之带倒计时的按钮--Button
1.说明 之前做过一个小项目,点击按钮,按钮进入倒计时无效状态,计时完成后,恢复原样,现在就实现该效果---带倒计时的按钮 2.效果 1)正常状态 2)MouseOver( ...
- WPF自定义控件与样式(2)-自定义按钮FButton
一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...
- 【转】WPF自定义控件与样式(2)-自定义按钮FButton
一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等 还是先看看效果图吧: 定义Button按钮名称叫FButton,主要是集成了 ...
- WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要针对WPF项目 ...
- WPF自定义控件与样式(14)-轻量MVVM模式实践
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. MVVM是WPF中一个非 ...
- WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...
- WPF自定义控件与样式(1)-矢量字体图标(iconfont)
一.图标字体 图标字体在网页开发上运用非常广泛,具体可以网络搜索了解,网页上的运用有很多例子,如Bootstrap.但在C/S程序中使用还不多,字体图标其实就是把矢量图形打包到字体文件里,就像使用一般 ...
- WPF自定义控件与样式(15)-终结篇 & 系列文章索引 & 源码共享
系列文章目录 WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与样式(3)-TextBox & Ric ...
- WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Che ...
随机推荐
- CF930E Coins Exhibition
题意:平面上一共有k个硬币(k<=1e9),给你n个区间这些区间中至少有一个硬币反面朝上,m个区间中至少有一个硬币正面朝上.问有多少种硬币放置方案?n,m<=100005. 标程: #in ...
- Python自学:第五章 列表解析
# -*- coding: GBK -*- squares = [value**2 for value in range(1,11)] print(squares) 输出为: [1, 4, 9, 16 ...
- Java 基础 - Exception和Error
综述 Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基 ...
- SpringCloud网关无法加载权限及IP黑名单白名单
启动springcloud服务注册中心base,再启动网关远程调用base的接口读取权限等数据,控制台出现加载null权限ERROR提示.在远程调用处打断点,先进入代理,找到抛出异常的原因是reque ...
- 运维人员最常用150个linux命令汇总
命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) l ...
- Spring基础面试题(一)
Spring是什么? Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求.常见的配置方式有 ...
- IntelliJ IDEA更换主题样式分享
原文地址:https://blog.csdn.net/liu865033503/article/details/79481785 .自定义主题样式网址:http://www.riaway.com/in ...
- POJ-3255-Roadblocks POJ-Dijkstra+邻接表
今天写了这一题,一开始跑了两个Dijkstra,但是造成内存超限,所以现在在学习邻接表,打算明天用邻接表和优先队列写,目前还在学习中,所以题目啥也还没上传,先上传了今晚对于邻接表的理解(见上图),明天 ...
- day 82 Vue学习三之vue组件
Vue学习三之vue组件 本节目录 一 什么是组件 二 v-model双向数据绑定 三 组件基础 四 父子组件传值 五 平行组件传值 六 xxx 七 xxx 八 xxx 一 什么是组件 首先给 ...
- zookeeper 选举白话理解