WPF编程里让TextBlock动态的显示时间

打算用WPF做一个秒表,如何让TextBlock动态的显示点击开始按钮之后的运行时间呢?

Xaml如下:
<Window x:Class="NetExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" x:Name="txt_timeShow" Text="00:00:00" Width="200" Height="30" TextAlignment="Center" FontSize="24"/>
<Button Grid.Row="2" x:Name="btn_StartStop" Content="Start" Width="80" Height="30" HorizontalAlignment="Center"
Click="btn_StartStop_Click_1"
/>
</Grid>
</Window>

CS代码部分:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace NetExample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitialTimer();
}
private DispatcherTimer _Timer;
private int _TimeDelay = 0;
private int count = 0;
void InitialTimer(){
_Timer = new DispatcherTimer();
_TimeDelay = 1000;
_Timer.Interval = TimeSpan.FromMilliseconds(_TimeDelay);
_Timer.Tick += _Timer_Tick;
}
private void _Timer_Tick(object sender, object e)
{
//处理
ShowTimeString(++count);
}
private string FormatTimeString(int value)
{
return value < 10 ? "0" + value.ToString() : value.ToString();
}
private void ShowTimeString(int count)
{
int hour = count / 3600;
int minute = (count % 3600) / 60;
int second = (count % 3600) % 60;
txt_timeShow.Text = FormatTimeString(hour) + ":" + FormatTimeString(minute) + ":" + FormatTimeString(second);
}
private void btn_StartStop_Click_1(object sender, RoutedEventArgs e)
{
if (_Timer.IsEnabled)
{
btn_StartStop.Content = "Start";
_Timer.Stop();
}
else
{
btn_StartStop.Content = "Stop";
_Timer.Start();
}
}
}
}

你自己可以增加重新计时,只要将count清零就行追问

我想显示毫秒,把_TimeDelay的值改为了1,但运行的结果和标准的时间差距挺大。应该怎么改呢?

追答

你设置千分之一秒刷新一次,希望一毫秒一毫秒跳动,UI线程都来不及处理。不同计算机的性能之间存在的差异也影响时间刷新,我们这种普通的计算机1秒钟跳动1000次根本不可能。你设置_TimeDelay为1,系统在执行时,也只会按照实际可分配的时间片执行,但时间变化是正确的。

温馨提示:内容为网友见解,仅供参考
无其他回答

WPF编程里让TextBlock动态的显示时间
<TextBlock Grid.Row="1" x:Name="txt_timeShow" Text="00:00:00" Width="200" Height="30" TextAlignment="Center" FontSize="24"\/> <Button Grid.Row="2" x:Name="btn_StartStop" Content="Start" Width="80" Height="30" HorizontalAlignment="Center"Click="btn_StartStop_Click_1"...

c# wpf 多个textblock滚动字幕怎么实现?
可以通过使用 WPF 中的 ListBox 控件来实现您所需的滚动报警信息功能,具体步骤如下:在代码中使用 ObservableCollection 存储报警信息,并将其绑定到 ListBox 控件的 ItemsSource 属性上,如下所示:在代码中使用 DispatcherTimer 定时器,定时更新 ListBox 控件中的报警信息,以及实现报警信息的滚动效果。具...

WPF中datagrid的DataGridTextColumn显示多行
<Style TargetType="TextBlock"> <Setter Property="TextWrapping" Value="Wrap"\/> <Setter Property="Height" Value="auto"\/> <\/Style> <\/DataGridTextColumn.ElementStyle> <\/DataGridTextColumn> 在代码中增加textBlock 的style TextWrapping=Wrap 就能换行了,而且要设置行高为auto,不然显示不出来 本回答由网友...

WPF 入门教程TabControl样式
代码中,每个选项卡的标题现在由 TabControl.Header 中的 StackPanel 存储,包含 Image 和 TextBlock。这允许你个性化每个选项卡的图标和文本颜色,甚至可以调整样式。如果你想通过编程方式控制 TabControl,WPF 提供了 SelectedIndex 和 SelectedItem 属性。以下是如何操作的:界面上添加的按钮允许你切换选项卡...

WPF绘图指南:用XAML轻松实现圆、线、矩形、文字、图片创意元素_百度...
在WPF中,通过使用特定元素轻松绘制图形。包括基本形状如圆、线条、椭圆、矩形、多边形,以及显示文字、图片、复杂路径和曲线。通过XAML代码快速构建界面元素。实现方法如下:使用Ellipse、Line、Rectangle、Polygon绘制基本形状。 TextBlock展示文字。 Image展示图片。 Path元素创建路径和曲线。 Canvas作为布局...

WPF 入门教程ListBox使用介绍
一个简单的 ListBox 示例如下,包含三个 ListBoxItem,每个都有自定义内容。每个 ListBoxItem 内容通过 StackPanel 组合,包括 Image 和 TextBlock,允许精细控制项目呈现样式,如颜色显示。与 ItemsControl 相比,ListBox 的另一个显著特点是它自带边框,使其看起来更像一个独立的交互控件。默认情况下,...

WPF中关于样式和模板的区别
textblock1.style=(style)Resources["TitleText"];请注意,样式一旦应用,便会密封并且无法更改。如果要动态更改已应用的样式,必须创建一个新样式来替换现有样式。2.wpf模板 当一个控件的外观不满足要求的时候,我们可以使用“控件模板”的方式更改控件的外观,WPF中的所有控件,只要有视觉外观,就会有...

WPF的图形呈现
Button 控件包含一个 ClassicBorderDecorator 元素 该元素又包含一个 ContentPresenter 元素 ClassicBorderDecorator 元素负责为 Button 绘制边框和背景 ContentPresenter 元素负责显示 Button 的内容 在本例中 由于您要显示文本 因此 ContentPresenter 元素中包含一个 TextBlock 元素 Button 控件使用 ContentPresenter 这意味着该...

虽非完美但却值得选择 Silverlight客观评测
XAML编程的基本方法就是赋予对象一个x:Name标签 例如 <TextBlock x:Name= message Text= Message: ><\/TextBlock> 一旦设定了x:Name属性 程序可以操作这个元素的属性 这一点与JavaScript在DHTML中操作HTML元素在原理上是相同的 message Text = Hello + name Text; 在程序和XAML元素之间通过名称建立...

如何使用visual studio 2015
然后再到 Properties 子窗口里,改变上述所有控件的显示文字。(Properties 子窗口——> Common ——> Content 或 Text)。最后,可以用鼠标拖放的方法,将现有控件的位置进行调整。9 进入编程写代码模式。难度:☆☆☆ 直到第 8 步骤,我们大部分时间都是在点鼠标、改文字。现在,到了见证编程奇迹的时...

相似回答