[UWP]从头开始创建并发布一个番茄钟

 

1. 自己用的番茄钟自己做#

在PC上我一直使用“小番茄”作为我的番茄钟软件,我把它打开后放在副显示器最大化,这样不仅可以让它尽到本分,而且还可以告诉我的同事“我正在专心工作”。可是我总是嫌弃它的手感不够愉悦,总想自己写一个番茄钟软件,正好最近很久没写UWP应用了很手痒,于是就抽空写了个自用的番茄钟并发布到微软应用商店。

结果手感也并不愉悦。

另外,本来本来我也打算用Storyboard实现动画,但火火总是劝我不要搞Storyboard,要用Composition API做动画。Storyboard的能力是有极限的,我从短暂的UWP生涯当中学到一件事,人越是玩弄动画,动画就越可能因为没有料到的事态而失败……除非超越Storyboard。所以我也不做Sotryboard啦。

微软的应用商店是一个还不错的平台,WPF程序员可以基于现有的知识轻易地创建一个UWP应用并发布到应用商店。尤其是现在微软的审核比较宽松,只要是对得起自己良心的应用一般都能通过审核。虽然因为商店抽风我自己都很难下载到自己的应用。这篇文章将讲解从创建UWP项目到发布到商店的整个流程。

2. 需求#

我只想要一个可以倒计时的Timer,顺便玩玩UWP的新API,所以原则上越简单越好,然后想到什么做什么。

很多番茄钟软件都会提供任务列表功能,还可以通过图表展示番茄数量、完成任务数量的统计。不过我已经有To-Do和Azure Devops,平时的工作还会记录在OneNote上,我更放心把我的数据放到微软那里而不是番茄钟那里,而且我认为衡量番茄工作法是否执行得好的标准是我的工作,而不是图表里展示给我的番茄数量,所以我对图表、统计、任务列表这些功能不是太感兴趣。

说了这么多其实还是因为我懒,平时上班已经处理这么多数据了,图表我也玩腻了,自己玩玩的东西就不想做这些工作,而且存储数据是要负责任的,我可不想负责任。

3. 创建项目#

首先安装Windows Template Studio,它可以帮助开发者简单地创建UWP项目。

安装后在创建新项目界面选择Windows Template Studio(Universal Windows),然后在打开的精灵控件窗口一步步创建一个已经包含基础功能的UWP应用。

项目名称是OnePomodoro,项目类型选择Blank,Design pattern选择了Prism,因为在WPF中用惯了Prsim。不过我不懂UWP中Prism怎么用,所以我也没打算马上就用,只是个小项目轻轻松松地CodeBehind一把梭。

页面项选择了Settings页面。功能项添加了好像很有趣的Toast Notifications、Live Tile等一系列的通知功能。

稍等几分钟后,一个包含了基本功能的UWP项目就创建好了,项目中还贴心地提示了很多需要处理的Todo项,运行效果如下:

然后添加Microsoft.Toolkit.Uwp.UIMicrosoft.Toolkit.Uwp.UI.Animations引用,这两个包是Windows Community Toolkit的一部分,提供了很多有用的Converter和动画。

第一次运行应用时会弹出一些示例通知,现在还不需要做到这么全面,找到App.xaml.cs里的LaunchApplicationAsync把里面一些通知相关的代码注释掉,然后就可以开始实现我们的功能了。

Copy
protected override async Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args) { await LaunchApplicationAsync(PageTokens.MainPage, null); } private async Task LaunchApplicationAsync(string page, object launchParam) { await ThemeSelectorService.SetRequestedThemeAsync(); NavigationService.Navigate(page, launchParam); SetupTitlebar(); Window.Current.Activate(); //await Container.Resolve<IWhatsNewDisplayService>().ShowIfAppropriateAsync(); //await Container.Resolve<IFirstRunDisplayService>().ShowIfAppropriateAsync(); //Container.Resolve<ILiveTileService>().SampleUpdate(); //Container.Resolve<IToastNotificationsService>().ShowToastNotificationSample(); }

4. 具体实现#

最终效果就是这样,一个单页面的应用,点击开始启动工作的计时器,点击停止(或者倒计时结束)转到休息的计时器,如此往返几次,一天的工资就到手了。

很多计时器是个由分针和秒针组成的表盘,但我已经玩腻了这种做法,简单些反而有更多的快乐。

为了好看首先要移除应用的标题栏,将CoreApplicationViewTitleBar.ExtendViewIntoTitleBar属性设置为True:

Copy
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信