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实现时钟的更多相关文章

  1. Win10 UWP开发中的重复性静态UI绘制小技巧 1

    介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态的界面设计.比如:画许多等距的线条,画一圈时钟型的刻度线,同特别的策略排布元素,等等. 读者可能觉得这些需求十分简单, ...

  2. nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……

    Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Wi ...

  3. New UWP Community Toolkit - RadialGauge

    概述 New UWP Community Toolkit  V2.2.0 的版本发布日志中提到了 RadialGauge 的调整,本篇我们结合代码详细讲解  RadialGauge 的实现. Radi ...

  4. 俄罗斯方块 UWP 版

    UWP跟 WPF编程模型一致,不过UWP做了精简,而且不同的系统的API还略有不同.不同的地方有以下几点: 1.动画.动画除了故事版,还有其它的实现方式. 2.异步方法.UWP中的方法调用,大部分都是 ...

  5. UWP 应用获取各类系统、用户信息 (2) - 商店授权信息、零售演示模式信息、广告 ID、EAS 设备信息、硬件识别信息、移动网络信息

    应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...

  6. UWP -- Background Task 深入解析

    原文:UWP -- Background Task 深入解析 1. 重点 锁屏问题 从 Windows 10 开始,用户无须再将你的应用添加到锁屏界面,即可利用后台任务,通用 Windows 应用必须 ...

  7. UWP 律师查询 MVVM

    APP简介 律师查询是基于聚合数据的律师查询接口做的,这个接口目前处于停用状态,但是,由于我是之前申请的,所以,还可以用,应该是无法再申请了. 效果图 开发 一.HttpHelper 既然是请求接口的 ...

  8. 领域驱动和MVVM应用于UWP开发的一些思考

    领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...

  9. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

随机推荐

  1. 【BZOJ 1014】 [JSOI2008]火星人prefix

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1014 [题意] 让你在线查询最长公共前缀. 支持单节点修改; 插入操作; [题解] / ...

  2. cordova 生成发行版apk,并添加证书 – 畅玩Coding

    原文:cordova 生成发行版apk,并添加证书 – 畅玩Coding 首先jdk生成证书. 1.进入jdk安装目录 D:\Java\jdk1.7.0\bin 2.执行命令 keytool -gen ...

  3. 静态资源命名的注意点以及document.write与innerHTML的区别

    今天拿出了去年刚开始学前端的那本书来看,发现好多新东西. 使用下划线和混合大小写不利于SEO! document.write与innerHTML的区别 这个问题大概是初学前端的人才会问的吧,业务代码中 ...

  4. 关于java项目与web项目中lib包的那点事

    一.在java项目中如何引入外部jar包:1.在我们的java项目下新建一个lib文件夹:2.将我们需要引入的jat包复制到lib文件夹下:3.选中我们lib包下的jar,右键选择Build Path ...

  5. Attribute-based identification schemes for objects in internet of things

    Methods and arrangements for object identification. An identification request is received from diffe ...

  6. 使用JScript编译指定目录下所有工程

    作者:朱金灿 来源:http://blog.csdn.net/clever101 我遇到这样一个问题:在一个插件工程目录下的插件工程越来越多,因此通过建一个解决方案然后把新增加的工程逐个添加进解决方案 ...

  7. 新世界PT850/PT853检查用友机对接T1交易宝

    新世界PT850/PT853检查用友机对接T1交易宝 这是一个老话题.简单.条形码号码模式是没有必要说,我要说的是,,启用条码扫描.显示有关信息. 并能够产生:条码 , 数量,价格格 这样做的目的.将 ...

  8. Spring 的 ApplicationEvent and ApplicationListener

    什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环境,可是理解成容器会更好些. ApplicationContext则是应用的容器. Sprin ...

  9. Struts2中文件的上传与下载

    文件上传 1.jsp页面 <s:form action="fileAction" namespace="/file" method="POST& ...

  10. day68_淘淘商城项目_01

    原文:day68_淘淘商城项目_01 课程计划 第一天: 1.电商行业的背景介绍--电子商务 2.淘淘商城的系统架构 a) 功能介绍 b) 架构讲解 3.工程搭建--后台工程 a) 使用maven搭建 ...