WPF自定义控件之带倒计时的按钮--Button
1.说明 |
之前做过一个小项目,点击按钮,按钮进入倒计时无效状态,计时完成后,恢复原样,现在就实现该效果---带倒计时的按钮
2.效果 |
1)正常状态 2)MouseOver(只有背景色变化) 3)点击进入无效状态
4)在无效状态下计时 5)恢复正常状态
3.XAML代码 |
<!--冷却计时按钮样式-->
<!--通过修改颜色值参数,以更改按钮颜色样式,更多修改,还请自行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"/> <!--总样式--> <Style x:Key="TimerBtnStyle" TargetType="{x:Type Button}">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Foreground" Value="{StaticResource ButtonForeground}"/>
<Setter Property="MinHeight" Value="25"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="rectangle" Margin="0" StrokeThickness="0" Fill="{StaticResource RectangleFill}"/>
<ContentPresenter x:Name="contentPresenter" HorizontalAlignment="Center" Margin="0" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard FillBehavior="Stop">
<StringAnimationUsingKeyFrames Storyboard.TargetProperty="(ContentPresenter.Content)" Storyboard.TargetName="contentPresenter">
<DiscreteStringKeyFrame KeyTime="0" Value="已提交"/>
<DiscreteStringKeyFrame KeyTime="0:0:1" Value="等待(30)"/>
<DiscreteStringKeyFrame KeyTime="0:0:2" Value="等待(29)"/>
<DiscreteStringKeyFrame KeyTime="0:0:3" Value="等待(28)"/>
<DiscreteStringKeyFrame KeyTime="0:0:4" Value="等待(27)"/>
<DiscreteStringKeyFrame KeyTime="0:0:5" Value="等待(26)"/>
<DiscreteStringKeyFrame KeyTime="0:0:6" Value="等待(25)"/>
<DiscreteStringKeyFrame KeyTime="0:0:7" Value="等待(24)"/>
<DiscreteStringKeyFrame KeyTime="0:0:8" Value="等待(23)"/>
<DiscreteStringKeyFrame KeyTime="0:0:9" Value="等待(22)"/>
<DiscreteStringKeyFrame KeyTime="0:0:10" Value="等待(21)"/>
<DiscreteStringKeyFrame KeyTime="0:0:11" Value="等待(20)"/>
<DiscreteStringKeyFrame KeyTime="0:0:12" Value="等待(19)"/>
<DiscreteStringKeyFrame KeyTime="0:0:13" Value="等待(18)"/>
<DiscreteStringKeyFrame KeyTime="0:0:14" Value="等待(17)"/>
<DiscreteStringKeyFrame KeyTime="0:0:15" Value="等待(16)"/>
<DiscreteStringKeyFrame KeyTime="0:0:16" Value="等待(15)"/>
<DiscreteStringKeyFrame KeyTime="0:0:17" Value="等待(14)"/>
<DiscreteStringKeyFrame KeyTime="0:0:18" Value="等待(13)"/>
<DiscreteStringKeyFrame KeyTime="0:0:19" Value="等待(12)"/>
<DiscreteStringKeyFrame KeyTime="0:0:20" Value="等待(11)"/>
<DiscreteStringKeyFrame KeyTime="0:0:21" Value="等待(10)"/>
<DiscreteStringKeyFrame KeyTime="0:0:22" Value="等待(09)"/>
<DiscreteStringKeyFrame KeyTime="0:0:23" Value="等待(08)"/>
<DiscreteStringKeyFrame KeyTime="0:0:24" Value="等待(07)"/>
<DiscreteStringKeyFrame KeyTime="0:0:25" Value="等待(06)"/>
<DiscreteStringKeyFrame KeyTime="0:0:26" Value="等待(05)"/>
<DiscreteStringKeyFrame KeyTime="0:0:27" Value="等待(04)"/>
<DiscreteStringKeyFrame KeyTime="0:0:28" Value="等待(03)"/>
<DiscreteStringKeyFrame KeyTime="0:0:29" Value="等待(02)"/>
<DiscreteStringKeyFrame KeyTime="0:0:30" Value="等待(01)"/>
<DiscreteStringKeyFrame KeyTime="0:0:31" Value="等待(00)"/>
</StringAnimationUsingKeyFrames>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.IsEnabled)">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
<DiscreteBooleanKeyFrame KeyTime="0:0:32" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" TargetName="rectangle" Value="{StaticResource MouseOverFill}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Fill" TargetName="rectangle" Value="{StaticResource PressedFill}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Fill" TargetName="rectangle" Value="{StaticResource EnabledFill}"/>
<Setter Property="OpacityMask" TargetName="contentPresenter" Value="{StaticResource EnabledOpacityMask}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
4.应用 |
<Button Width="65" Content="提交请求" FontSize="14" Style="{StaticResource TimerBtnStyle}" />
5.总结 |
通过此代码,希望给初学者一些启示,有更多想法的同学,多多批评,不吝赐教。
WPF自定义控件之带倒计时的按钮--Button的更多相关文章
- [转]WPF自定义控件之带倒计时的按钮--Button
1.说明 之前做过一个小项目,点击按钮,按钮进入倒计时无效状态,计时完成后,恢复原样,现在就实现该效果---带倒计时的按钮 2.效果 1)正常状态 2)MouseOver( ...
- WPF自定义控件与样式(2)-自定义按钮FButton
一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...
- 【转】WPF自定义控件与样式(2)-自定义按钮FButton
一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等 还是先看看效果图吧: 定义Button按钮名称叫FButton,主要是集成了 ...
- WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展
一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...
- WPF自定义控件与样式(15)-终结篇 & 系列文章索引 & 源码共享
系列文章目录 WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与样式(3)-TextBox & Ric ...
- WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 日历控 ...
- WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要针对WPF项目 ...
- WPF自定义控件与样式(14)-轻量MVVM模式实践
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. MVVM是WPF中一个非 ...
- WPF自定义控件与样式(15)-终结篇
原文:WPF自定义控件与样式(15)-终结篇 系列文章目录 WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与 ...
随机推荐
- javaweb学习总结十(xml解析<SAX以及DOM方式>)
一:XML解析技术 一般我们使用sun公司或者开源组织开发的工具包解析xml效率比较高. 1:jaxp解析xml,jaxp是sun公司开发的解析xml工具包 2:jaxp解析xml代码如下 a:获取d ...
- [未完成]WebService学习第一天学习笔记
[未完成]WebService学习第一天学习笔记[未完成]WebService学习第一天学习笔记
- 【优先队列】【最近连STL都写不出来了/(ㄒoㄒ)/~~】hdu_5360/多校#6_1008
题意:就是让你写出一个邀请朋友的顺序,朋友答应一起出去玩的条件是除他以外所有同意出去玩的人数要在[ l[i], r[i] ]范围内,否则他就不答应. 分析:这题比赛的时候想麻烦了,其实只要在左边界满足 ...
- 【dp入门题】【跟着14练dp吧...囧】
A HDU_2048 数塔 dp入门题——数塔问题:求路径的最大和: 状态方程: dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j];dp[n][j] = ...
- iOS用AVAudioPlayer播放m4a音频
音频文件sound.m4a放到Supporting Files目录 引用头文件 #import <AVFoundation/AVFoundation.h> 定义一个全局的属性: @prop ...
- server 2003上为单点登录sso配置映射
单点登录不是本人做的,代码需要调用类似 http://***.com/login.sso 的地址.要成功调用,需要在IIS设置.sso为后缀的映射项. Win7系统下一设置完,就能成功调用. 但是服务 ...
- 【转】android 安卓APP获取手机设备信息和手机号码的代码示例
http://blog.csdn.net/changemyself/article/details/7421476 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓 ...
- CSE(Corrupted State Exceptions) 严重异常处理办法
原因分析 出现这个问题说明.NET版本至少是4.0,因为微软在.NET 4.0版本中更改了异常处理机制.微软认为catch(Exception)这种写法是不负责任的,程序员应该按照异常严重类别决定程序 ...
- 关于z-index的总结
z-index的作用 很多时候需要把一个元素覆盖到另一个元素之上,比如登入弹出框等,这个时候就需要z-index属性出场了.所以呢,z-index就是调节层的显示优先级,决定哪个显示在最上方.作用范围 ...
- jQuery对象和dom对象的辨析和相互转化
jquery对象和dom对象总是让人感觉很难分清,其实只要做到1对两者概念有明确认识2找出不同点 A DOM 1概念 DOM对象(Document Object Model,文档对象模型)可以把htm ...