Windows Development 88 UWP, WPF, and Other Windows Development Techniques


Windows Phone Runtime 8.1如何设置最小化的工具栏

以前在Silverlight Runtime下,要设置一个最小化(缩紧)的工具栏,给ApplicationBar设置Mode属性为Minimized就行 到了Windows Phone 8.1运行时下,这个Mode属性木有了。就算你不加任何按钮或菜单,在XAML设计器里起来是最小化了,运行时还是会展开的。比如这段代码: 在XAML设计器里的效果: 运行时的效果: 草草草草草。。。 查了下stackoverflow,其实CommandBar有个新的属性,ClosedDisplayMode,可以实现Minimized。注意,加在CommandBar上,不是Page.BottomAppBar。 这样就OK了。...

WP WinRT XAML

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...

WP WinRT

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

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

WP 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.ApplicationMod...

Silverlight Windows Phone

Surface Pro 3 防煎蛋经验

Surface Pro 3刚刚在国内上市,很多用户和我一样发现它经常发热严重,可以煎蛋。首先这并不是美版或国行的问题,大家都是会煎蛋的。我的美版用了一个多月下来,总结了一些防煎蛋经验,分享给大家,希望有所帮助。 首先,Surface Pro 3在插着电源和靠电池运行的时候,煎蛋的程度是不一样的。在默认的“平衡”电源计划下,插着电源使用是会煎蛋的,这是正常的。所以本文讨论的都是靠电池运行时候的配置。 1. 亮度 影响煎蛋和电池续航最显著的是亮度设置。如果你的亮度太高,会发现一个警告: 经过开荒,能让这个警告消失的阈值是40%,这个精确值在电源选项里是可以改的: 2. 对煎蛋效果影响最大的另一个因素是Windows服务 2.1 可以禁用的服务: 家庭组 HomeGroup Listener (HomeGroupListener)HomeGroup Provider (H...

Surface

Windows Phone 8.1 (WinRT) 如何实现Timer

最近在用WinRT重写以前的一个应用,需要显示一个时钟,结果发现没有Timer控件。。。 看来只能自己写代码实现了。屌丝的做法是Thread.Sleep,但那个会卡UI线程,用户会操作不了任何东西。正确的思路应该是用.NET 4.5的async await,不会卡UI线程。替代Thread.Sleep的方法是Task.Delay,它是awaitable的,所以代码是这样的: while (true) { // 要做的操作 await Task.Delay(毫秒); } 为了增加逼格和可重用性,我们需要进一步封装。注意观察本高(diao)手(si)是如何一步步提高逼格的。 首先是循环条件和毫秒数,要能被控制,所以加入属性: public int Interval { get; set; } public bool IsEnabled { get; se...

WP 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 _selecte...

WP DatePicker WinRT

Surface Pro 3 个人使用评测之系统和软件

话说没有优秀软件的硬件就是一坨翔,这话说的一点都没错。Surface Pro系列之所以牛逼,就因为它不仅有充满现代科技感的硬件设计,更有完整的桌面版Windows 8.1,有了Windows几乎啥事都能干了,根本不用把果蛆pad放在眼里。今天写的这篇文章就是我使用Surface Pro 3近一个月来对于操作系统和软件的感受。也会教大家一些调教技巧,让你的Pro 3更顺手。 一、Windows版本 美版Surface Pro 3搭载的是Windows 8.1 Pro x64英文版。系统属性和EULAID是这样的: 和Surface RT、Surface 2不同,Pro系列是基于x86架构的硬件的,所以安装的“完整版”Windows就和普通笔记本、台式机上的功能是一模一样的。在电脑上能用的软件,Pro上都能用。当然,RT系统能用的软件Pro也能用。 第一次开机联网后会自动激活Win...

Windows Surface DPI

Portable Class Library中如何调用WCF OData Service

上个月发布了一个WP8.1应用:NuGet Search,并在GitHub开了源:https://github.com/EdiWang/WP-NuGetSearch NuGet的服务接口是个WCF OData Service,为了装逼,我尝试使用了跨Framework的PCI工程,结果no zuo no die了。和一般.NET类库不同,PCL有些tricky的地方要爆。下面是开荒成功的代码: public async Task GetDataAsync(string searchTerm, int pageIndex, bool includePreRelease = false) { try { IDictionary queryOptions = new Dictionary { { "filter",...

WCF PCL OData

我在《上海轨道交通》中是如何解决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 =...

WP Group PinYin