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 ...
随机推荐
- 设置storyboard拉伸属性
- lucene 7.x 查询
@Test public void indexSearch() throws IOException, ParseException { //Termquery:精确string查询 // Query ...
- react持续记录零散笔记
根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做 DOM diff 这些生命周期在深入项目开发阶段是非常重要的 ...
- javascript学习-创建json对象数据,遍历
之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...
- java 中的两个常用命令
这两个命令,分别为,javac 和java 实际操作如下图:
- Spring 的 ApplicationEvent and ApplicationListener
什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环境,可是理解成容器会更好些. ApplicationContext则是应用的容器. Sprin ...
- Xcode 4.5( iOS6 SDK)、旧版本号cocos2d,支持iPhone5解析度
支持iPhone5全屏 1假设没有支持iPhone5是否.直接运行程序可以准备提交.开放iPhone5模拟器,你会发现上面有黑色的程序.没有矩形. 2真正运行该程序时,.你会发现程序回程屏幕高度.它是 ...
- OpenGL(十一) BMP真彩文件的显示和复制操作
glut窗口除了可以绘制矢量图之外,还可以显示BMP文件,用函数glDrawPixels把内存块中的图像数据绘制到窗口上,glDrawPixels函数原型: glDrawPixels (GLsizei ...
- OpenGL(十四) 模板测试
启用模板测试时,OpenGL会在内存中开辟一块空间作为模板缓冲区,里边保存了每个像素的"模板值",模板测试的过程就是把每一个像素的模板值与一个设定的模板参考值进行比较,符合设定条件 ...
- 利用MAC OS X 自带的磁盘工具提取光盘镜像ISO文件
虽说渐渐地Mac笔记本基本告别内置光驱时代了,随着网络的普及,使用到光驱的机会也渐少,但有时又难免需要光驱,比如二货出版社的随书光盘等…我们可以通过USB外置光驱将光盘内容提取为ISO文件保存到电脑里 ...