直接贴代码了:

TimeShowerWindow.xaml

<Window x:Class="HelloWorld.TimeShowerWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:HelloWorld"
mc:Ignorable="d"
Title="WPF Timer" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Padding" Value="5" />
<Setter Property="Margin" Value="5" />
</Style>
</Window.Resources> <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions> <StackPanel Orientation="Horizontal">
<Button x:Name="startDispatcher" Content="Start Dispatcher Timer" Click="StartDispatcher" />
<Button x:Name="startTimer" Content="Start Timer" Click="StartTimer" />
<Button x:Name="reset" Content="Reset" IsEnabled="False" Click="Reset" />
</StackPanel> <Label x:Name="clock"
Grid.Row="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
FontSize="25"
FontWeight="Bold" />
</Grid>
</Window>

TimeShowerWindow.xaml.cs

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows;
using System.Windows.Threading; namespace HelloWorld
{
/// <summary>
/// TimeShowerWindow.xaml 的交互逻辑
/// </summary>
public partial class TimeShowerWindow : Window
{
private DispatcherTimer dispatcherTimer; //方式1(推荐WPF开发时使用) private Timer timer; //方式2:通用方式 public TimeShowerWindow()
{
InitializeComponent(); // 方式1 - 对象初始化,以及指定相应的委托程序
dispatcherTimer = new DispatcherTimer { Interval = new TimeSpan(, , ) };
dispatcherTimer.Tick += OnDispatcherTimer; // 方式2 - 对象初始化,以及指定相应的委托程序
timer = new Timer(OnTimer, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
} /// <summary>
/// 方式1 的按钮点击事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StartDispatcher(object sender, RoutedEventArgs e)
{
dispatcherTimer.Start();
ShowTime();
EnableStartButtons(false);
} /// <summary>
/// 方式2 的按钮点击事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StartTimer(object sender, RoutedEventArgs e)
{
timer.Change(TimeSpan.Zero, new TimeSpan(, , ));
EnableStartButtons(false);
} /// <summary>
/// 重置按钮的点击事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Reset(object sender, RoutedEventArgs e)
{
timer.Change(Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
dispatcherTimer.Stop();
EnableStartButtons(true);
clock.Content = string.Empty;
} /// <summary>
/// 启用或禁用按钮
/// </summary>
/// <param name="enabled"></param>
private void EnableStartButtons(bool enabled)
{
startDispatcher.IsEnabled = enabled;
startTimer.IsEnabled = enabled;
reset.IsEnabled = !enabled;
} private void OnDispatcherTimer(object sender, EventArgs e)
{
ShowTime();
} private void OnTimer(object state)
{
//子线程中更新 UI 线程,必须使用
Dispatcher.Invoke(() => ShowTime());
} /// <summary>
/// 此方法运行在 UI 线程
/// </summary>
private void ShowTime()
{
clock.Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}

运行截图

谢谢浏览!

一个简单的 WPF 程序,用于显示实时时间的更多相关文章

  1. 分析一个简单的WPF程序

    1.新建WPF项目 使用Visual Studio 代码编辑器点击新建项目,选择 WPF应用后点击下一步: 在新窗口中我们填写项目名称.选择项目位置后点击创建就完成了WPF项目的创建. 2.WPF项目 ...

  2. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...

  3. WInform 创建一个简单的WPF应用

    (一)创建一个简单的WPF应用 首先,在这里我要说明的是:这里的例子,都是通过控制台程序来创建WPF应用,而非使用现成的WPF模版.因为WPF模版封装了创建WPF应用所需要的各种基本元素,并不利于我们 ...

  4. 制作一个简单的WPF图片浏览器

    原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1.  对指定文件夹下所有JPG文件进行预览2.  对选定图片进行旋转3.  对选定图片 ...

  5. 利用JSP编程技术实现一个简单的购物车程序

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  6. 第一讲 一个简单的Qt程序分析

    本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton&g ...

  7. Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

  8. 用C语言编写一个简单的词法分析程序

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...

  9. 一个简单的JSP程序示例

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

随机推荐

  1. 写出这个数-PTA

    读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10的100次方. ​​ 输出格式: ...

  2. 在windows实现nginx滚动日志

    nginx自身并不能够切分或滚动日志,因此只能用一个bat脚本按天切割日志,并删除三天前的日志 @echo off rem nginx滚动日志 rem nginx工作目录 set workspace= ...

  3. Requests库主要方法解析以及Requests库入门需要掌握的框架

    Requests库主要方法解析以及Requests库入门 1.requests.request(method,url,**kwargs) **kwargs:控制访问的参数,均为可选项 params:字 ...

  4. 在生成.net core 3.0程序时不包含nuget库

    在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...

  5. 往element 模块里面渲染数据

    <template> <div class="hello"> <section class="el-container"> ...

  6. 2019年上半年收集到的人工智能Python编程干货文章

    2019年上半年收集到的人工智能Python编程干货文章 一文了解Python深拷贝与浅拷贝问题 Python广度优先查找和深度优先查找(内附python教程分享) Python基础之函数2 (参数的 ...

  7. Linux下设置root密码

    如下面的代码所示: sudo passwd [sudo] geeksong 的密码: 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码 更性的unix密码就是r ...

  8. CODING 签约天津大学,助力高校“产学”接轨

    近日,CODING 与天津大学顺利达成合作,将通过 CODING 的一站式 DevOps 解决方案为天津大学师生提供软件研发管理方面的先进理念和产品. 根据中共中央.国务院印发的<中国教育现代化 ...

  9. C# 第三方库

    基本上选用的都是 https://www.nuget.org 分类中最流行的那个库 1. 日志工具库 NLOG Stackify.com 简单入门文章  https://stackify.com/nl ...

  10. momentjs在vue中的用法

    js代码 import moment from 'moment'; const jsCountDown = document.getElementById('js-countdown'); const ...