博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF钟表效果实现
阅读量:5978 次
发布时间:2019-06-20

本文共 3154 字,大约阅读时间需要 10 分钟。

WPF在样式定义和UI动画上面相对于以前的技术有了不少的提升,下面给出WPF技术实现钟表的效果:

1、Visual Studio新建一个WPF应用程序,命名为WpfClock,新建一个images文件夹,并准备一个钟表的背景图片和程序图标素材。

2、编辑MainWindow.xaml文件,对UI进行定制,代码如下(指针都是用Rectangle实现的,当然可以用图片代替):

1 
8
9
10 11
12
13 14
15
16
17
18
19
20
21 22
23
24
25
26
27
28
29 30
31
32
33
34
35
36
37
38 39
40

3、编辑MainWindow.xaml.CS文件,对后台逻辑进行定制,代码如下:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Data; 8 using System.Windows.Documents; 9 using System.Windows.Input;10 using System.Windows.Media;11 using System.Windows.Media.Imaging;12 using System.Windows.Navigation;13 using System.Windows.Shapes;14 namespace WpfClock15 {16     using System.Threading;17     using System.Windows.Threading;18     /// 19     /// MainWindow.xaml 的交互逻辑20     /// 21     public partial class MainWindow : Window22     {23         //计时器24         System.Timers.Timer timer = new System.Timers.Timer(1000);25         public MainWindow()26         {27             InitializeComponent();28             #region 初始化时间29             secondPointer.Angle = DateTime.Now.Second * 6;30             minutePointer.Angle = DateTime.Now.Minute * 6;31             hourPointer.Angle = (DateTime.Now.Hour * 30) + (DateTime.Now.Minute * 0.5);32             this.labTime.Content = DateTime.Now.ToString("HH:mm:ss");33             #endregion34             timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);35             timer.Enabled = true;36         }37 38         private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)39         {40             //进行拖放移动41             this.DragMove();42         }43        private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)44         {45            //UI异步更新46             this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>47             {48                 //秒针转动,秒针绕一圈360度,共60秒,所以1秒转动6度49                 secondPointer.Angle = DateTime.Now.Second * 6;50                 //分针转动,分针绕一圈360度,共60分,所以1分转动6度51                 minutePointer.Angle = DateTime.Now.Minute * 6;52                 //时针转动,时针绕一圈360度,共12时,所以1时转动30度。53                 //另外同一个小时内,随着分钟数的变化(绕一圈60分钟),时针也在缓慢变化(转动30度,30/60=0.5)54                 hourPointer.Angle = (DateTime.Now.Hour * 30)+ (DateTime.Now.Minute * 0.5);55                 //更新时间值56                 this.labTime.Content = DateTime.Now.ToString("HH:mm:ss");57             }));58         }59 60     }61 }

4、编译运行,如果运气不错的话,应该能显示如下效果:

5、总结

WPF可以用RotateTransform中的Angle进行旋转,可以指定中心点(CenterX,CenterY)

 

转载地址:http://gysox.baihongyu.com/

你可能感兴趣的文章
马哥linux学习笔记:openssl的使用
查看>>
我的友情链接
查看>>
deep learning 作業 2.2
查看>>
Linux jdk配置
查看>>
怎么开启JavaScript ?
查看>>
Linux 查看进程被杀死的详情
查看>>
Python 编码问题
查看>>
http缓存机制和原理详解
查看>>
插件使用之加载自定义lua脚本
查看>>
定时发送服务器运行数据并设置阀值警报方法
查看>>
JavaScript时间日期格式转化
查看>>
os:进程与线程问题
查看>>
Java: 数据类型
查看>>
我的友情链接
查看>>
曼彻斯特编码
查看>>
Python OpenCV学习笔记之:使用Grabcut算法进行图像背景和前景分割
查看>>
2月上旬国内域名总量止跌回升 净增长量达8574个
查看>>
static的用法
查看>>
MSSQL 2008 数据库变成可疑状态
查看>>
交叉编译Open***-2.4.3
查看>>