Edi Wang

Microsoft MVP for Azure

Windows Development UWP, WPF, WinForm, etc

我的第一个Windows Phone应用:《上海影城排片查询》已发布

上海影城排片查询免费 查询上海几所影城最新上映的电影。 - 显示票价、放映厅、放映时间 - 保存到日历并定时提醒 - 查看影院地址 - 直接呼叫影院电话 - 邮件、短信分享 数据来自上海影城官网,一般只更新未来3天的排片表。 这个App采用了微软哥 @韦恩卑鄙 的 MVVM-Sidekick框架开发。很多基友问我数据怎么来的,由于官方不提供SOAP或REST服务,所以我是解析官网排片表的HTML得到的,大家不要在意这些细节。下个版本我会在Windows Azure上构建专门的服务以保证官网的改动不会要求更新App。
Windows Phone

Windows Phone 8 检查网络状态、打开网络设置

开发WP应用的时候,如果你的应用需要互联网连接,那么检测当前网络是否可用并给出提示是非常必要的。Windows Phone 8 检查网络是否可用的 API如下: System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 这个API会检查手机网络或WIFI是否可用,返回bool类型结果。 转到网络设置用的是ConnectionSettingsTask对象,ConnectionSettingsType属性决定了打开的设置页面是哪种连接类型,如果要打开WLAN设置,代码如下: var connectionSettingsTask = new ConnectionSettingsTask { ConnectionSettingsType = ConnectionSettingsType.WiFi }; …
Windows Phone WIFI Network

Windows Phone 8: MVVM-Sidekick框架如何绑定ProgressIndicator

MVVM(Model-View-ViewModel)是xaml开发者常用的装逼模式,WP应用也不例外,除了我们常用的Prism和MVVM Light,现在还有个后起之秀叫做MVVM-Sidekick。用了它,就可以充分利用.NET4.5的async await来提升逼格了,这个轻量级框架也提供了非常便捷的代码模板,同样完成一个功能需要花费的精力比同类框架要少。具体介绍可以看它的官网:https://github.com/waynebaby/mvvM-Sidekick 但是,在DataContext的处理上,这个框架有些特殊。前几天我就爆掉了。 简单的说,我的需求就是在Windows Phone页面上显示一个进度指示器,把后台的Busy和Message属性绑定到ProgressIndicator上面。这个简单的任务在MVVM Light框架中与其他UI控件的绑定完全一致,可以这么写:
Windows Phone MVVM

如何在设计器中显示Windows Phone 8的菜单栏(ApplicationBar)

最近正式开始玩WP开发,把一些小技巧和经验写成单独的一篇篇文章,虽然很菜, 通常,我们新建一个Windows Phone应用程序后,菜单栏的代码默认是在MainPage.xaml.cs文件中的。只要取消模板里的这些注释就能在运行时看到菜单栏。 但是这么做有个缺点,就是无法在设计器里直观的看到菜单栏,不便于我们设计和调整UI。其实我们不必使用后台代码来实现菜单栏。它可以直接定义在xaml文件里。打开MainPage.xaml,在LayoutRoot的Grid之外(注意不要定义在Grid里边),加入代码: 这样我们就能在设计器里得到一个菜单栏了。 要做半透明的菜单栏也很方便,只要给shell:ApplicationBar加上Opacity="0.5"属性,0.5就是50%透明。
Windows Phone

Windows Phone 8 文本框如何限定软键盘类型

在开发Windows Phone应用时,一个非常通用的需求就是限定文本框的输入内容。最直接的办法是限定弹出的软键盘的类型。比如有些文本框只允许输入数字,那就弹出数字键盘,不让用户选择其他键盘。这样做的好处有两个:节省后台验证逻辑、方便用户交互。 要限定键盘类型,做法很简单,就是设置TextBox控件的InputScope属性。比如输入电话号码的文本框可以这样写: 这样弹出的文本框就是数字键盘: 所有的InputScope类型见下表: 翻译自MSDN:http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh393998%28v=vs.105%29.aspx 键盘 备注 InputScope 包括自动修正、建议和表情 Text 默认键盘 …
Windows Phone

Windows Phone 8 列表控件(LongListSelector)分组

Windows Phone 8的列表控件天生支持分组,就像人脉应用中的类似,可以快速根据拼音首字母定位。在列表视图中点击分组标题后显示所有的组名,点击组名即可定位到这个组。我们自己开发的WP应用也能做到这样的分组功能,但需要一些额外的代码。下面的例子来自我的一个WP应用,有图有真相: 分组视图: 实现LongListSelector分组其实很简单。 1. 首先,你需要一个分组的助手类,这是一个相对标准的类,MSDN上抄来的: public class Group : List { public Group(string name, IEnumerable items) : base(items) { this.Title = name; } public string Title { …
Windows Phone

使用PowerShell操作Windows Event Log

PowerShell是个很牛逼的命令行工具,在Windows 7以后的系统里都默认自带。学会了PowerShell就可以提升逼格,让妹子崇拜。今天就教大家用PowerShell操作Windows的Event Log。 首先,启动PowerShell很简单,只需要在开始菜单里输入Power,就能找到了(Windows 8用户可以直接在开始屏幕里搜索Power)。 启动PowerShell后,你可以看到一个这样的界面。和CMD不同,它是深蓝色背景的,并且路径前多了PS前缀。看起来很厉害的样子: 有用程序写过Windows Event Log的童鞋都知道,我们的首要任务是创建一个Log和一个Source。PowerShell里语法如下: new-eventlog -LogName 日志名称 -Source 源名称 比如,我们创建一个Name为Game,Source为CS的Log,可以这样写: …
Windows PowerShell EventLog

How to enable IPC share on Windows 8/8.1/10

Update 2017.2: This will also work with Windows 10 最近为了贯彻微软先进思想,给台式机换了个Windows 8,许多地方爆出了翔,但用惯以后还是很舒服的。在Windows 8里,操作系统的许多设置被微软在黑暗中偷偷的改过了。比如局域网共享文件夹,在以前版本的Windows上,如果知道对方机器的管理员帐户密码,就可以在路径后面加上“盘符$"来直接访问对方的整个硬盘。比如在:\\DiaosPC\D$,系统会弹出一个身份验证对话框,输入DiaosPC上的管理员帐号后,即可访问他D盘的内容。在Windows 2000的年代,黑客们可以利用这点进行“空连接”攻击,给对方下载木马,然后用at命令定时执行,这些黑暗的历史就不告诉大家了。。。。 然而,这个功能在Windows 8上似乎被撸掉了,虽然在管理工具里还能见到所有盘符的管理共享,但局域网中是无法访 …
Windows

如何让Surface RT的开始屏幕显示4行磁贴

昨天Surface RT启动后,开始屏幕突然变成了4行磁贴。虽然感觉比较惊讶,蛋说实话,4行还是比3行的可用性高一点。不过重启Surface以后,就还原成3行了,怀疑这是Windows判别显示器大小时候的一个bug。 经过一番研究,在Windows 8(Windows RT)上,开始屏幕显示多少行磁贴,是由Windows自动决定的,主要取决于屏幕分辨率以及屏幕大小。在Surface的1366x768、10.1,10.6寸屏上,默认显示3行,并且不提供设置选项。 不过,1366x768的分辨率在较大的屏幕上(14.1、15.4寸),是可以显示4行磁贴的。在其他分辨率的设备上,也是如此。但是Windows没有提供手动设置的地方,所以我们只能改注册表强撸。 下面的注册表设置,只适合Surface RT,Windows 8(非RT)用户请勿尝试,小心灰飞烟灭。 Windows Registry …
Windows Surface

开荒成功:如何在Surface RT上给其他计算机共享文件

最近在撸Surface,屌丝只能买RT版的,上面的Windows 8不是全功能的,你们懂的。对我来说,比较不方便的就是似乎不能共享文件。当然,用Surface访问我台式机上的共享一点没问题。所以今天开荒了一下如何在Windows 8 (RT版上)架设共享文件夹。 1. 在服务管理里面,找到Server,并设置为自动启动,然后启动这个服务。 2. 运行mmc.exe(服务器管理员猿应该经常用这个吧) 3. 将“共享文件夹”添加到右边的管理单元里。 4. 现在你就可以添加你要共享的文件夹了。注意权限设置一定要正确,符合自己的需要。 5. 用局域网中的其他电脑访问你的Surface的机器名,应该能看到共享了!
Windows Surface