WPF钟表效果实现

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

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

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

 1 <Window x:Class="WpfClock.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="MainWindow" Margin="2" Height="327" Width="311" AllowsTransparency="True"
 5         WindowStyle="None" Background="Transparent" WindowStartupLocation="CenterScreen"
 6         Icon="images/clock.ico"
 7         ResizeMode="NoResize" Topmost="False" Opacity="1">
 8         <Grid Width="300" Height="300" MouseLeftButtonDown="Grid_MouseLeftButtonDown">
 9         <Image Source="images/backGround.png"></Image>
10
11         <Label Name="lab商标" Foreground="White" Margin="0,0,0,211" HorizontalAlignment="Center" VerticalAlignment="Bottom" Height="Auto" Width="Auto" FontSize="13" >JackMoon</Label>
12         <Label Name="lab创建时间" Foreground="White" Margin="0,91,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Height="Auto" Width="Auto">1987</Label>
13
14         <!-- 秒针定义  -->
15         <Rectangle Margin="150,0,149,150" Name="rectangleSecond" Stroke="White" Height="120" VerticalAlignment="Bottom" Width="1">
16             <Rectangle.RenderTransform>
17                 <RotateTransform x:Name="secondPointer" CenterX="0" CenterY="120" Angle="0" />
18             </Rectangle.RenderTransform>
19         </Rectangle>
20         <!-- -->
21
22         <!-- 分钟定义  -->
23         <Rectangle Margin="150,49,149,151" Name="rectangleMinute" Stroke="LightGreen" Width="1">
24             <Rectangle.RenderTransform>
25                 <RotateTransform x:Name="minutePointer" CenterX="0" CenterY="100" Angle="45" />
26             </Rectangle.RenderTransform>
27         </Rectangle>
28         <!-- -->
29
30         <!-- 时针定义  -->
31         <Rectangle Margin="150,80,149,150" Name="rectangleHour" Stroke="LightYellow" Width="1">
32             <Rectangle.RenderTransform>
33                 <RotateTransform x:Name="hourPointer" CenterX="0" CenterY="70" Angle="90" />
34             </Rectangle.RenderTransform>
35         </Rectangle>
36         <!---->
37          <Label Content="08:08:08" FontSize="16" Foreground="White" Height="Auto" HorizontalAlignment="Center" Margin="114,0,113,86" Name="labTime" VerticalAlignment="Bottom" Width="Auto" />
38
39     </Grid>
40 </Window>

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 WpfClock
15 {
16     using System.Threading;
17     using System.Windows.Threading;
18     /// <summary>
19     /// MainWindow.xaml 的交互逻辑
20     /// </summary>
21     public partial class MainWindow : Window
22     {
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             #endregion
34             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)

 <Rectangle.RenderTransform>
       <RotateTransform x:Name="hourPointer" CenterX="0" CenterY="70" Angle="90" />
  </Rectangle.RenderTransform>
时间: 2024-08-07 18:26:44

WPF钟表效果实现的相关文章

用CSS3实现钟表效果

背景:最近在学习CSS3,看到了一个小案例,通过自己的学习,动手实现了它,现在把它分享出来. 效果图 实现过程 1.首先我们需要在页面中写出一个静态的钟表效果.首先我们需要一个表盘div wrap 对其进行简单的样式设置,用border-radius属性将其设置成圆形. <div id="wrap"></div> #wrap{width:200px; height:200px; border:2px solid #000; margin:100px auto;b

C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer &amp; PopUp Menu)

原文:C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer & PopUp Menu) 时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.WPF.ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt Widgets等,只分享自己熟悉的.自己会的. 一.先看效果: 二.本文

WPF星空效果

效果 前阵子看到ay的蜘蛛网效果和知乎的登录页背景,觉得效果很酷.自己也想写一个.于是写着写着就变成这样了.少女梦幻的赶脚有木有.我这有着一颗少女心的抠脚大汉 实现思路 分为两个部分: 1.星星无休止的漫游. 2.星星之间的连线. 星星和连线非别放到两个容器里,以便分开操作. 星星 把星星的运动分解为X轴和Y轴两个不相干的运动,分别操作.操作就是随机生成一个速度,随机生成一个时间.运动完之后再随机生成一个速度,随机生成一个时间......无限循环. 星星的旋转也是同样的道理. 连线 首先解释下连

WPF 外发光效果

WPF的滤镜效果,目前框架自带的只有BlurEffect和DropShadowEffect两种.DropShadowEffect为投影效果,只能显示黑灰颜色的效果,如果想让一个边框达到别的颜色的滤镜效果,我们可以利用BlurEffect进行模糊处理实现.实现原理主要是用两个Border进行叠加,第一个Border进行背景色的模糊效果处理,第二个Border设置背景色.边框色以及叠加在第一个Border上面. 效果图: <Grid> <Border Background="#77

基于ESRIMAP的WPF地图效果

>基于ESRI开放的WPF地图组件进行开发 >支持地图的触控技术 >大屏宏观地图展示 >加载标准的切片图层 >加载标准的WMS图层 >WPF透明浮动操控按钮,实现地图操作                                   (OSM二维矢量地图加载) (谷歌卫星地图加载)

python之tk简单学习之一个简单的钟表效果

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #TK实现一个秒表效果 #目的:是为了简单学习下TK from time import * from Tkinter import * class StopWatch(Frame): mesc=50 def __init__(self,parent=None,**kw): Frame.__init__(self,parent,kw) self.__start=0.0

钟表效果

最近在做一个项目,上面有钟表的显示.钟表的显示无非用到角度旋转.先看下效果图: 制作过程如下: 先切出四张图:表盘,三个指针(沿着边界切) 代码如下: 利用CGAffineTransformMakeRotation顺时针旋转,计算好弧度传入. //UI //注意指针的添加顺序 UIImageView *watchImageView =[[UIImageViewalloc]initWithFrame:CGRectMake(0,0,self.width,self.height)]; watchIma

WPF学习之绘图和动画

如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是否吸引用户的眼球也已经成为衡量软件的标准. 软件项目成功的三个要素是:资源.成本.时间.无论是为了在竞争中保持不败还是为了激发起用户对软件的兴趣,提高软件界面的美化程度.恰当的将动画和3D等效果引入应用程序都是一个必然趋势.然而使用传统的桌面应用程序开发工具和框架(如Winform.MFC.VB.D

【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/core-static-files.html http://www.yuanjiaocheng.net/ASPNET-CORE/setup-mvc.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-design-pattern.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-routing.html h