UWP实现时钟
UWP现在的开发确实很方便,不过资料真的好少啊。。。
前些天看到同学有实实现自定义的时钟,这东东挺简单的,就自己也写个,没成想,遇到个坑,费了好长时间,记下来一下。
效果图:

画个圆,三条线就好。XAML代码如下:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Ellipse x:Name="ellipse" Stroke="Black"/>
<Line x:Name="line_Second" Stroke="Red" StrokeThickness="3"/>
<Line x:Name="line_Minute" Stroke="Blue" StrokeThickness="2"/>
<Line x:Name="line_Hour" Stroke="Black" StrokeThickness="1"/>
</Grid>
C#代码:
public sealed partial class MainPage : Page
{
DispatcherTimer timer;//定义定时器
double ScreenHeight;
double ScreenWidth;
double ellipseWidth;
const double PI = 3.1415926;
const double lineLength_Second=;
const double lineLenght_Minute = ;
const double lineLenght_Hour = ;
static int second;
static int minute;
static int hour; public MainPage()
{
this.InitializeComponent();
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(, , );
timer.Tick += Timer_Tick;//每秒触发这个事件,以刷新指针
timer.Start();
} private void Timer_Tick(object sender, object e)
{
line_Second.X1 = Window.Current.Bounds.Width / ;
line_Second.Y1 = Window.Current.Bounds.Height / ; line_Minute.X1= Window.Current.Bounds.Width / ;
line_Minute.Y1=Window.Current.Bounds.Height / ; line_Hour.X1= Window.Current.Bounds.Width / ;
line_Hour.Y1= Window.Current.Bounds.Height / ; //秒针
second = DateTime.Now.Second;
double radius_second = PI * second / ;
line_Second.X2 = lineLength_Second * Math.Sin(radius_second)+ line_Second.X1;
line_Second.Y2 = line_Second.Y1- lineLength_Second * Math.Cos(radius_second); //分针
minute = DateTime.Now.Minute;
double radius_minute= PI * minute / ;
line_Minute.X2 = lineLenght_Minute * Math.Sin(radius_minute) + line_Minute.X1;
line_Minute.Y2 = line_Minute.Y1-lineLenght_Minute * Math.Cos(radius_minute); //时针
hour = DateTime.Now.Hour;
double radius_hour = hour*PI/+radius_minute/;
line_Hour.X2 = lineLenght_Hour * Math.Sin(radius_hour) + line_Hour.X1;
line_Hour.Y2 = line_Hour.Y1 - lineLenght_Hour * Math.Cos(radius_hour);
} protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e); //获取窗口实际长宽,以下就是为了适用不同窗体,
//圆甚至直线的长度也要随窗体变化
ScreenHeight = Window.Current.Bounds.Height;
ScreenWidth = Window.Current.Bounds.Width; ellipseWidth = ScreenWidth > ScreenHeight ? ScreenHeight - : ScreenWidth - ;
ellipse.Height = ellipseWidth;
ellipse.Width = ellipseWidth;
}
}
基础不太好,结果好久才把指针搞对,原因是我对UWP的角度的0°位置不清楚:

窗体左上角为坐标原点,而角度的0°位置如图,调了好久,我还以为写错了,原来是坐标系搞错了,哎
UWP实现时钟的更多相关文章
- Win10 UWP开发中的重复性静态UI绘制小技巧 1
介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态的界面设计.比如:画许多等距的线条,画一圈时钟型的刻度线,同特别的策略排布元素,等等. 读者可能觉得这些需求十分简单, ...
- nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……
Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Wi ...
- New UWP Community Toolkit - RadialGauge
概述 New UWP Community Toolkit V2.2.0 的版本发布日志中提到了 RadialGauge 的调整,本篇我们结合代码详细讲解 RadialGauge 的实现. Radi ...
- 俄罗斯方块 UWP 版
UWP跟 WPF编程模型一致,不过UWP做了精简,而且不同的系统的API还略有不同.不同的地方有以下几点: 1.动画.动画除了故事版,还有其它的实现方式. 2.异步方法.UWP中的方法调用,大部分都是 ...
- UWP 应用获取各类系统、用户信息 (2) - 商店授权信息、零售演示模式信息、广告 ID、EAS 设备信息、硬件识别信息、移动网络信息
应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...
- UWP -- Background Task 深入解析
原文:UWP -- Background Task 深入解析 1. 重点 锁屏问题 从 Windows 10 开始,用户无须再将你的应用添加到锁屏界面,即可利用后台任务,通用 Windows 应用必须 ...
- UWP 律师查询 MVVM
APP简介 律师查询是基于聚合数据的律师查询接口做的,这个接口目前处于停用状态,但是,由于我是之前申请的,所以,还可以用,应该是无法再申请了. 效果图 开发 一.HttpHelper 既然是请求接口的 ...
- 领域驱动和MVVM应用于UWP开发的一些思考
领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...
- UWP中实现自定义标题栏
UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...
随机推荐
- 【t067】补充装备
Time Limit: 1 second Memory Limit: 128 MB [问题描述] Mini进入洞口前自然要先来到镇里的装备店买些装备.买每件装备都需要付出一定的体力点,同时也会获得一定 ...
- 通过getElementById来取得Form里的表单元素
<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>湖南易通 ...
- tensorflow 函数接口的理解
1. tf.nn.softmax tf.nn.softmax(logits, dim=-1, name=None) w*x+b ⇒ logits softmax 函数执行的操作:exp(logits) ...
- sparksql parquet 合并元数据
java public class ParquetMergeSchema { private static SparkConf conf = new SparkConf().setAppName(&q ...
- Android Studio打包apk,aar,jar包
转载请标明出处:一片枫叶的专栏 文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独 ...
- 让delphi2010操作界面回到delphi7模式
让delphi2010操作界面回到delphi7模式 在使用delphi2010的过程中,很不习惯它的窗口在一个框框内,感觉很不方便,可能是因为使用delphi7很多年了,已经习惯了delphi7的版 ...
- WPF 实现繁花曲线
原文:WPF 实现繁花曲线 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/nihang1234/article/details/83346919 X ...
- Java--ConcurrentHashMap原理分析
一.背景: 线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap. 效率低下的H ...
- WPF之动画
原文:WPF之动画 线性关键帧.不连续关键帧动画: <Window.Triggers> <EventTrigger RoutedEvent="Window.Loaded&q ...
- 形态学-扩大-C代码
直接在代码,难.他们明白: void MorhpolotyDilate_ChenLee(unsigned char* pBinImg, int imgW, int imgH, Tpoint* mask ...