Edi Wang

.NET and Azure Developer

Windows Phone

Windows Phone 个人开发者一年回顾

今天是2015年1月25日,距我的第一个WP应用上架正好一年。这一年里,因为选择Windows Phone,开发Windows Phone,我收获了很多。我虽然工作是ASP.NET网站开发,WP只是业余的新手,但短短一年来,它带给我太多的美好。有技术上的成就,有许多新的朋友。 我想回顾一年来我和WP的点点滴滴。同时也向和我一样始终坚守在这个平台的个人开发者们致敬。 最早开始写WP应用其实是2013年7月,在我买了第一部WP手机以后,看着Channel  9上的视频边学边写。那时候安卓和苹果早就平分天下了,几乎没有WP什么事。当时我选择Windows Phone开发,仅仅是因为我在Windows平台上已经掌握的编程技能可以用于WP开发,不会耗费太大的学习成本,比如C#、Silverlight等技术。和我最早研究计算机一样,我并没有把赚钱当作目的和目标,而是纯粹的兴趣,所以至今我没有靠WP应用 …
Windows Phone

Windows Phone Runtime 8.1 按返回键彻底关闭App

Windows Phone Runtime 8.1里面的坑不止一点点,最明显的是很多应用以前可以通过按返回键关闭,但是在8.1之后,如果你用了WinRT的runtime写程序,就会发现返回键的行为仅仅是返回WP的主屏幕,而不是关闭App。长按返回键你会发现你的App是被“最小化”在后台了。WP8.1的新版日历应用也是这样。 虽然这对系统性能没有什么影响,但是让处女座用户看见了就会感觉不爽,所以我们还是把它改掉吧。 WinRT里面这个硬件返回按钮是有专门的事件的:HardwareButtons.BackPressed。我们需要处理的情况仅仅是在应用的主页面上,按手机返回按钮关闭App,所以不需要override全局的HardwareButtons.BackPressed事件。只需要在主页面(通常是MainPage.xaml.cs)里override两个导航事件: protected …
Windows Phone WinRT

Windows Phone Runtime 8.1 如何显示系统状态栏(以前的SystemTray)

首先。。。虽然我文章写的2,但是国内愿意主动分享WP开发经验的博客太少了,大家都是粉,为了这个平台不容易,所以我有点什么都会拿出来分享,觉得文章菜的请不要喷。。。 开发WP8.1的小伙伴们如果选择了WinRT的runtime,可能会被坑:如果你的手机主题是黑色的,但是你的应用选择了白色主题,就像这样 RequestedTheme="Light" 那你会发现,虽然你在写UI配色方面偷懒了许多,但是WP的系统状态栏(显示信号、时间的地方),也就是Silverlight Runtime里称作SystemTray的,配色并不会因为你选择了“Light”而变成黑色这种对比色,它始终是跟着手机系统设置走的(黑色主题则为白色,白色主题则为黑色),于是你的应用就会出现一条白色的状态栏在手机顶端,用户再也不能愉快的看时间了。草草草草草。 当你想修这个问题的时候,你又会发现微软已经把Silverlight时代 …
Windows Phone WinRT

Windows Phone 8.1 Silverlight运行时StorageFolder.GetFolderFromPathAsync爆掉的问题

微软说好的一键Target WP8.1的神话终究还是个坑。不少朋友发现有些API虽然编译通过,但依然是爆炸的。比如 await StorageFolder.GetFolderFromPathAsync(); 运行时会就直接爆炸了: 这个坑留在我的几个应用里好久了,今天刚解决。方法是换个API。。。。。 原来是这样子: var path = await StorageFolder.GetFolderFromPathAsync("Assets/StationFloorMaps/"); var imgTemplate = await path.GetFileAsync(_imgPath.Replace("Assets/StationFloorMaps/", string.Empty)); 现在是这样子: var package = Windows.ApplicationModel. …
Silverlight Windows Phone

How to use Timer on Windows Phone 8.1 (WinRT)

Recently I am rewriting an old App using WinRT, I need to display a clock, but I find there is no Timer control. It looks like I have to implement the Timer myself. I don't use Thread.Sleep because it will block UI thread. I prefer using async await over it. To replace Thread.Sleep, I use Task.Delay:  while (true) { // 要做的操作 await Task.Delay(毫秒); } 为了增加逼格和可重用性,我们需要进一步封装。注意观察本高( …
Windows Phone Async Async Await WinRT Timer

Windows Phone 8.1 DatePicker和TimePicker控件的数据绑定

Windows Phone Runtime 8.1 (WinRT) 自带了DatePicker和TimePicker控件。妈妈再也不用担心我装WPToolkit了。但是和WPToolkit里面的两个Picker不同,WinRT的控件在MVVM模式里做data binding的时候是要爆的。 首先是DatePicker。 具体的情况表现为:ViewModel里的属性是DateTime类型,并且VM正确实现了INotifyPropertyChanged接口,前台直接用Binding语法绑定这个属性,但VM变化,界面不变。界面变化,VM不变。代码看起来就像是这样: Xaml: ViewModel: private DateTime _selectedDate; public DateTime SelectedDate { get { return _selectedDate; } …
Windows Phone DatePicker WinRT

我在《上海轨道交通》中是如何解决Windows Phone拼音分组bug的

我的App《上海轨道交通》有个很坑的bug,按拼音首字母分组的站点列表会出现分组错误的情况,比如“莘庄”应该在X下,而WP的SortedLocaleGrouping居然把它分在了S下。这是因为“莘庄”的“莘”是多音字。同理,应该在C下的“长江南路”也到了“Z”下。类似的还有: 分组的代码用的是MSDN的范例改的:http://msdn.microsoft.com/library/windows/apps/jj244365(v=vs.105).aspx 这个范例对于英文来说是没问题的,中文就会出现多音字的问题。 为了解决这个坑爹问题,我写了个PinYinGroupResolver,用的时候可以写出很装逼的代码,比如这样: GroupedStations = new PinYinGroupResolver(sGroup) .For(s = …
Windows Phone PinYin

Windows Phone 8 开发:地图应用测试正常发布后爆掉的解决办法

最近更新了一次我的《上海轨道交通》App,结果爆了。为了加入街区图功能我用了WP自带的Map控件,并且也申请了正确的API Key,发布之前在模拟器和真机上测试一切OK,结果发布后就是这个样子的: 具体的异常信息是: Cannot create instance of type 'Microsoft.Phone.Maps.Controls.Map' [Line: 84 Position: 38]Exception from HRESULT: 0xD0000022 根据之前的经验,这像是没有在AppManifest中打开需要的权限。可是我分明已经勾选了ID_CAP_MAP了,还需要什么权限呢?最后经过一番苦逼的研究,在MSDN上看到了这样一个警告: 你TM在逗我?VS居然在我部署测试程序的时候偷偷把这个capability选上了而不告诉我一下!我的App设计的目的就在于尽量不要使用网络。 …
Windows Phone

Live to Code: Windows Phone开发,让我感受不一样的天地

我是一个疯狂的软粉,也是微软产品十几年的老用户,2012年毕业参加工作之后接触到了许多微软的前沿技术,对微软产品更加爱不释手。在用Windows Phone以前,我用的是一款中端的Android手机,Android系统虽然软件丰富多样,但它非常耗电,系统也经常卡得受不了,还中过两次毒,于是忍无可忍之下我换了一部诺基亚720,终于凑齐了微软的三个代表:Surface,Office和Windows Phone。 其实我的主要工作是开发ASP.NET网站,自己的博客也是一路走来从WebForm 2.0维护到现在的MVC 5.1,然而相比ASP.NET开发,WP让我感觉更贴近普通用户。开发免费、无广告、注重界面和交互的WP应用成为了我的副业。 先前我并没有做过真正意义上的客户端软件,对WP开发充满新鲜感。由于之前的工作中有少许Silverlight和WPF的经验,所以今年年初我看着Channel9 …
Windows Phone Microsoft