Edi Wang

.NET and Azure Developer

All Posts

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

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

针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结

自定义错误页面和异常记录是个很古老的话题了,但依旧可以让人爆到现在。在我做了无数次试验并总结经验和原则后,写下本文,已警后人。 本文的范围和限制 本文仅仅适用于部署在IIS7或以上版本中的ASP.NET 4.0集成模式应用程序。IIS7以上的意思是Windows Server 2008以上服务器适用。我已在WS2012R2,IIS8上测过。 本文的方法均适用于ASP.NET WebForm和MVC应用程序。 本文针对的问题 静态错误页面好还是动态错误页面好?我该如何设计ASP.NET网站错误处理? 我不希望错误页面后面跟上aspxerrorpath=…这个小尾巴。 我的自定义错误页面在VS里调试是好的,为什么部署到服务器上就出不来了? 我的自定义错误页面可以正常显示,但为什么返回的Http状态码不正确? 异常日志该怎样记录,有没有比较好的实践? 一、错误页面的选择 选择静态html页面 …
IIS

Windows Azure的计费方式和省钱的最佳实践

我从去年9月开始试用国内的Windows Azure,同时也有一个国际版Azure的账号。目前国内的Windows Azure还没有出台计费标准和细则,所以这篇文章里不会提及具体费用,但可以下载每月使用记录来观察和总结计费规律。国内的计费规则和Azure国际版是一样的,但是具体标准还没出来。写这篇文章的目的是总结一下我遇到的问题和经验,以帮助大家如何更经济的去使用Azure的服务。 一、计费周期和订阅 Azure的计费是跟着订阅走的,一个账户可以拥有多个订阅。我使用的主要是网站和虚拟机两个服务。就目前的情况来看,免费试用套餐一不小心就会超额被禁用。一旦订阅被禁用只能等到下个计费周期开始才能继续使用。比如我的订阅是9月9日开通的,那我的计费周期就是每月的9日到下月的8日。如果我在10月份超出了额度限制,那我在Azure上的所有服务都会暂停,并且要等到11月9日才能重新恢复。 被禁用的订阅前面 …
Azure

如何把网站及数据库部署到Azure上并绑定域名

国内的Windows Azure很快就要正式商用了,许多小伙伴们也有计划把现有的网站迁移到Windows Azure上去。但是国内相关的中文文档还是比较缺乏的,所以今天我就写了个超详细教程来教大家如何把ASP.NET网站部署到Windows Azure上。demo用的网站是带有数据库的,并且最后还会演示如何绑定一个.com域名到网站上。 我写的内容基本都是在Channel9上看来的,并且自己亲自实践过许多次的。大家现在阅读的这个博客就是用同样的方法部署到Windows Azure上的。所以不必担心文章坑爹。我的博客不像国内的许多网站那样,发表的内容都没自己测过,非常没有责任心。 下面进入正题。 1. 部署数据库 首先,假设我们的网站已经开发好了。这是一个带有一个SQL Server数据库的ASP.NET网站。第一步我们要做的,是把数据库部署到Windows Azure上去。 你需要的工具: …
SQL Azure DevOps

ASP.NET Web API 跨域访问(CORS)要注意的地方

前几天我在帮队友撸一个WebAPI的跨域访问问题,被爆出了翔,今天正好有时间总结一下经验。 首先一个最坑之坑,也是ASP.NET官网上都没有提到的坑,是Web.config里的配置。大家看这个建立WebAPI项目之后,默认的Web.config: 它居然把OPTIONS类型的请求给撸掉了!然而,在jQuery等框架里发起CORS请求的时候,虽然你写的可能是“GET”,但是现在的浏览器是会自动把这个GET先撸成OPTIONS去访问服务的,这也叫“preflight”请求。如果你的服务拒绝OPTIONS这个verb,你会得到一个405的结果(用fiddler就可以看到)。 所以,要让WebAPI支持CORS,第一步就是在web.config里把“”删掉。 接下来,要实现CORS,有两种办法。一是在客户端完成(要求对WebAPI做少量拓展),二是在服务端(WebAPI)本身做支持。 一、客户端 …
ASP.NET Web API CORS