首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 入門實作:建立簡單倒數計時器(置頂、置中、透明背景)

     編輯:關於.NET

使用 Visual Studio 2008 建立 WPF 專案,體驗 XAML 宣告式 UI 與傳統 WinForms 差異。實作一個置頂、螢幕置中、紅色大字體的倒數計時器。

專案結構

  • App.xaml / App.xaml.cs:應用程式進入點
  • MainWin.xaml / MainWin.xaml.cs:主視窗 UI 與邏輯
  • ProcessCount.cs:倒數邏輯類別

倒數計時器執行畫面

核心程式碼

ProcessCount.cs - 封裝倒數邏輯:

public class ProcessCount {
    private int _TotalSecond;
    public ProcessCount(int totalSecond) { _TotalSecond = totalSecond; }
    public bool ProcessCountDown() { if (_TotalSecond == 0) return false; _TotalSecond--; return true; }
    public string GetHour() => string.Format("{0:D2}", _TotalSecond / 3600);
    public string GetMinute() => string.Format("{0:D2}", (_TotalSecond % 3600) / 60);
    public string GetSecond() => string.Format("{0:D2}", _TotalSecond % 60);
}

MainWin.xaml - 透明背景、無邊框、Grid 佈局:

<Window ... WindowStyle="None" Background="Transparent" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Topmost="True">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition /><ColumnDefinition Width="40"/><ColumnDefinition /><ColumnDefinition Width="40"/><ColumnDefinition />
    </Grid.ColumnDefinitions>
    <TextBlock Name="HourArea" Text="00" FontSize="180" Background="Red" VerticalAlignment="Center" Grid.Column="0"/>
    <TextBlock Name="HourSplitMinute" Text=":" FontSize="180" Background="Red" VerticalAlignment="Center" Grid.Column="1"/>
    <TextBlock Name="MinuteArea" Text="10" FontSize="180" Background="Red" VerticalAlignment="Center" Grid.Column="2"/>
    <TextBlock Name="MinuteSplitSecond" Text=":" FontSize="180" Background="Red" VerticalAlignment="Center" Grid.Column="3"/>
    <TextBlock Name="SecondArea" Text="00" FontSize="180" Background="Red" VerticalAlignment="Center" Grid.Column="4"/>
  </Grid>
</Window>

MainWin.xaml.cs - DispatcherTimer 每秒觸發更新 UI:

public partial class MainWin : Window {
    private DispatcherTimer timer;
    private ProcessCount processCount;
    public delegate bool CountDownHandler();
    public event CountDownHandler CountDown;

    public MainWin() { InitializeComponent(); Loaded += MainWin_Loaded; }

    private void MainWin_Loaded(object sender, RoutedEventArgs e) {
        timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
        timer.Tick += timer_Tick;
        int totalSec = Convert.ToInt32(HourArea.Text)*3600 + Convert.ToInt32(MinuteArea.Text)*60 + Convert.ToInt32(SecondArea.Text);
        processCount = new ProcessCount(totalSec);
        CountDown += processCount.ProcessCountDown;
        timer.Start();
    }

    private void timer_Tick(object sender, EventArgs e) {
        if (OnCountDown()) { HourArea.Text = processCount.GetHour(); MinuteArea.Text = processCount.GetMinute(); SecondArea.Text = processCount.GetSecond(); }
        else timer.Stop();
    }
    public bool OnCountDown() => CountDown?.Invoke() ?? false;
}

註解完整,適合 WPF 初學者參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved