首页 > 其他 > 详细

[转]WPF自定义控件之带倒计时的按钮--Button

时间:2014-02-19 09:44:53      阅读:378      评论:0      收藏:0      [点我收藏+]
1.说明

 

 

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

 

2.效果

 

 

1)正常状态bubuko.com,布布扣               2)MouseOver(只有背景色变化)bubuko.com,布布扣         3)点击进入无效状态bubuko.com,布布扣         

4)在无效状态下计时bubuko.com,布布扣              5)恢复正常状态bubuko.com,布布扣

3.XAML代码

 

 

bubuko.com,布布扣
bubuko.com,布布扣
 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>
bubuko.com,布布扣
bubuko.com,布布扣

 

4.应用

 

 

1 <Button Width="65" Content="提交请求" FontSize="14" Style="{StaticResource TimerBtnStyle}" />

 

5.总结

 

 

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

 

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

[转]WPF自定义控件之带倒计时的按钮--Button

原文:http://www.cnblogs.com/luohengstudy/p/3554677.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!