Edi Wang

.NET and Azure Developer

Windows Phone

Windows Phone 8 开发:应用崩溃时给作者发送错误报告邮件

我们的应用难免会爆,但是手工在各个方法上加try...catch...未必能cover到所有场景,有时候我们不希望应用吞掉错误,发生严重异常时,我们应当允许应用在用户面前爆掉。如果没有处理这些异常,应用程序的表现就是闪退。比较好的做法是在应用崩溃时给用户一个选择是否发送邮件告诉应用作者崩溃的详细日志。对于作者来说,等待DevCenter的异常报告相对而言比较被动。如果能在应用崩溃之后立即得到回馈那就可以尽早修复问题。 做法很简单,和ASP.NET网站在Global.asax中使用的全局错误处理类似,WP应用也有个全局错误处理的事件。 打开App.xaml.cs,定位到Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)事件处理函数上。 当任何未处理的异常产生时,这个函 …
Windows Phone Exception

Windows Phone 8 LongListSelector按拼音首字母分组

Windows Phone 8的LongListSelector控件按拼音分组主要有两种方法,一个是在数据源里手工指定拼音首字母字段,作为index,这种方法效率高但会造成数据冗余不宜维护。另一个就是我今天介绍的方法,来自MSDN,虽然官网例子是针对是英文数据的首字母分组,但其实稍微改一下还是是支持中文的。 首先给大家看看分组的效果,和WP人脉应用按联系人拼音首字母分组的意思是一样的: 实现方法很简单。首先你需要一个来自MSDN的AlphaKeyGroup类,代码如下(我稍作了代码风格上的改动,编译结果和MSDN官网是一样的,不要在意这些细节): public class AlphaKeyGroup : List { /// /// The delegate that is used to get the key information. /// …
Windows Phone

Use GB2312 encoding on Windows Phone 8

如果你在WP开发中遇到过中文乱码,多数原因就是编码问题。比如用webclient获取远程网页的内容,如果目标网页是GB2312编码的,那你取得的很可能是乱码。就像这样: 虽然webclient的构造函数支持传递编码方式进去,但WP默认Encoding枚举中没有GB2312编码: 聪明的你可能会用Encoding.GetEncoding(“GB2312”)强撸,结果灰飞烟灭: 好在这个问题已经有高手给解决了。只要添加这三个文件到项目中去就能直接使用。 big5.bingb2312.binDBCSEncoding.cs 这些文件在我的SkyDrive共享上都能下载到。https://skydrive.live.com/?mkt=zh-CN#cid=E0A43B71445444C5&id=E0A43B71445444C5!10177 之后,你就可以通过这个方法获取GB2312编码了:   …
Windows Phone Encoding

Using FontAwesome in Windows Phone 8

FontAwesome是Web开发人猿常用的一套图标库,它将369个图标制成了字体,能够矢量缩放、自由配置颜色。但是Windows Phone开发常用的界面技术是xaml,不是html,是不是就无法体验FontAwesome了?当然不是!由于FontAwesome是个字体库,WP是可以整合字体的,所以通过简单的步骤依旧能在WP上用FontAwesome的图标。 首先,和在网站中使用一样,要去FontAwesome官网(http://fontawesome.io/)下载最新的包,解压后得到5个字体文件,我们只需要“FontAwesome.otf”。将它复制到你的WP项目中,一般作为资源文件,我们习惯将它放到Resource文件夹下。 然后选中FontAwesome.otf,在属性窗格中,把Build Action改成Resource 之后要立即Build一下,然后回到xaml里,试试给 …
Windows Phone

Windows Phone 8开发: 如何让图片自适应黑色、白色主题

前几天发现我的App有个bug,即某个页面的电话图标在白底黑字的主题下会消失。我的电话图标用的是一个白色的PNG图片,在WP默认的黑底白字主题下,就像是这样: 然而换了白底黑字,图就看不到了: 要解决这个问题我们固然可以准备两张图片然后用编程的方法去加载,但最简单的做法是通过Brush来搞: 原先的代码是这样的: 用了Brush给它刷上WP当前主题的前景色(PhoneForegroundBrush): 于是在白色背景的主题下我们就得到了自动被刷成黑色的图片:
Theme Windows Phone

Windows Phone 8: 如何自定义Pivot头部样式

WP的Pivot控件很牛逼,但想要调整样式没有什么比较直观的方法。许多少年只会改HeaderTemplate,但要做到下面这种效果,HeaderTemplate是不够的。 首先,正确的方法是通过模板的样式来做。比如上面这张图的样式,就需要在App.xaml里定义自己的Pivot控件样式。下面的代码加在Application.Resources节点下,这样你的每一个页面就都能用到这个样式了。 别忘了把primitives的namespace定义好: xmlns:primitives="clr-namespace:Microsoft.Phone.Controls.Primitives;assembly=Microsoft.Phone" 代码里面的TitleTemplate对应“diaosbook 阅读器”这一行,也就是Pivot的Title属性。PivotHeadersControl就是 …
Windows Phone

我的第一个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