最近做一个WPF小项目需要使用到计时器,因此写了一个计时控件,记录下来,以便下次使用。
前台的XAML:
<UserControl x:Class="Test.CountDown" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="110" d:DesignWidth="150"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="43*" /> <ColumnDefinition Width="13"/> <ColumnDefinition Width="43*" /> <ColumnDefinition Width="13"/> <ColumnDefinition Width="43*" /> </Grid.ColumnDefinitions> <TextBlock Text="00" Name="HourArea" VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="0" Foreground="DarkOrange" /> <TextBlock Text=":" Name="HourSplitMinute" VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="1" Foreground="DarkOrange" /> <TextBlock Text="00" Name="MinuteArea" VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="2" Foreground="DarkOrange" /> <TextBlock Text=":" Name="MinuteSplitSecond" VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="3" Foreground="DarkOrange" /> <TextBlock Text="00" Name="SecondArea" VerticalAlignment="Center" FontSize="30" Background="Transparent" Grid.Column="4" Foreground="DarkOrange" /> </Grid> </UserControl>
后台的逻辑:
public partial class CountDown : UserControl { public DispatcherTimer timer; public Process pro; public Stopwatch sw = new Stopwatch(); public int seconds; public CountDown() { InitializeComponent(); pro = new Process(); timer = new DispatcherTimer(); timer.Interval = new TimeSpan(0, 0, 1); timer.Tick += new EventHandler(timer_Tick); } void timer_Tick(object sender, EventArgs e) { TimeSpan ts = new TimeSpan (0,0,seconds); pro.totalSecond = (int)(ts - sw.Elapsed).TotalSeconds; if (pro .totalSecond > 0) { HourArea.Text = pro.GetHour(); MinuteArea.Text = pro.GetMinute(); SecondArea.Text = pro.GetSecond(); } else { timer.Stop(); sw.Stop (); sw.Reset(); SecondArea.Text = string.Format("{0:D2}", 0); } } } public class Process { public int totalSecond; //获取小时字符串 public string GetHour() { return string.Format("{0:D2}", totalSecond / 3600); } //获取分钟字符串 public string GetMinute() { return string.Format("{0:D2}", (totalSecond / 60 - ((int)(totalSecond / 3600) * 60))); } //获取秒字符串 public string GetSecond() { return string.Format("{0:D2}", totalSecond % 60); } }
调用:
this.countDown1.seconds = 300;//传入倒计时总时间(秒) this.countDown1.timer.Start(); this.countDown1.sw.Start();
时间: 2024-10-12 12:27:54