[转]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 ...
随机推荐
- [JZOJ6258] 【省选模拟8.9】轰炸
题目 题目大意 给你一棵树和树上的许多条从后代到祖先的链,选择每条链需要一定代价,问覆盖整棵树的所有点的最小代价是多少. \(n,m\leq 100000\) 正解 (由于时间过于久远,所以直接说正解 ...
- 廖雪峰Java16函数式编程-2Stream-6reduce
1. 聚合方法 Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果 例如: Stream.of(1, 2, 3, 4, 5).count(); // ...
- DDOS 单例
DDOS.H #pragma once //g++ ../../../Main.cpp ../../../DDOS.cpp -lpthread #include <stdio.h> #in ...
- Divide by Zero 2018 and Codeforces Round #474 (Div. 1 + Div. 2, combined)G - Bandit Blues
题意:求满足条件的排列,1:从左往右会遇到a个比当前数大的数,(每次遇到更大的数会更换当前数)2.从右往左会遇到b个比当前数大的数. 题解:1-n的排列,n肯定是从左往右和从右往左的最后一个数. 考虑 ...
- 0922CSP-S模拟测试赛后总结
连发三篇爆炸实录我的心态竟然还这么好…… 昨天题目的D2.稍难. 这也不是我连续拿倒数第一的理由. T1不会.赛时硬写了一个30分的三次方暴力.还有一个地方写挂了.如果不是数据足够水我就爆零了. 也就 ...
- 异或前缀和——cf1186C
很思维的题,b的1个数和c的1个数相差为偶数时,必定有偶数个不同 反之必定有奇数个不同 #include <iostream> #include <cstdlib> #incl ...
- hadoop快照管理
快照相当于对目录做备份,并不会复制所有文件,而是记录文件的变化命令用法 ()hdfs dfsadmin -allowSnapshot 路径 (开启指定目录的快照功能) ()hdfs dfsadmin ...
- mac idea解决快捷键的问题
取消mac的快捷键 设置->键盘->快捷键 我这里取消的有:聚焦->显示聚焦搜索 应用快捷键->显示帮助菜单. 类似eclipse的自动提示错误的解决方案(quick fix ...
- 《DSP using MATLAB》Problem 8.41
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- springboot-配置多数据源之番外篇(分包实现)
场景: 随着业务发展,系统连接多数据库成为常态,继前面AOP的实现方式之后,这里记录一下分包实现的方式. 实现: 1.pom.xml <?xml version="1.0" ...