All Posts in 2015


Windows 10 UWP开发:报错和反馈页面的实现

我的《上海轨道交通》应用里有个允许用户报告错误的页面,会把当前视图(xaml页面名称)、页面摘要、用户反馈的内容以及设备的软硬件信息生成邮件发给应用作者,界面如下: 生成的邮件如下: 问题描述:测试 (程序版本:3.2.0.0, 所在页面:StationDetail, 页面摘要:宜山路, 设备名:ISAAC, 操作系统:WINDOWS, SKU:Surface_Pro_3, 产品名称:Surface Pro 3, 制造商:Microsoft Corporation, 固件版本:, 硬件版本:) 要实现这样的报错页面非常容易 1.获取软硬件信息 我们要用的类是: Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation 比如获得设备名称,就可以直接: var …


Windows 10 UWP开发:如何本地化APP名称

我们在设计APP的时候,可能会考虑到不同国家和地区的用户使用,并在界面里针对不同的语言写资源文件做本地化。但是,如何让你的APP名称也本地化?比如在简体中文的系统上显示在程序列表里的是“调色板”,而在英文系统上显示的是“Color Palette”。 做法很简单,首先,和通常做本地化一样,你得有个"Strings\语言\Resources.resw"的文件夹结构。比如简体中文用的是“zh-CN”,美国英语是“en-US” 然后分别在resw文件里加一个key,比如AppName,然后针对不同语言填写不同的名称。这里简体中文是“调色板”,英语是“Color Palette” 最后这部最关键,打开你的Package. …


How to save image to file in Windows 10 UWP

My UWP application "Shanghai Metro" has an option to allow user save the metro graph to local file system. The image file is located under project directory, "Assets\shanghaimetro-xl.jpg", and will ask the user to choose a location when saving the image. This is a very common functionality, it's also easy to achieve in UWP applications. The most easy way to do it is to use my library "Edi.UWP. …


Windows 10 UWP开发:更新VS2015 Update 1后无法加载旧工程的解决办法

今天更新了VS2015 Update 1,然后打开以前的UWP工程就爆炸了。这是因为Update 1里的UWP SDK是10586的,以前是10240的。所以我们需要手工改一下工程文件,把运行时的版本号指向10586。不过要注意,这样编译出来的应用就只有Windows 10 TH2的用户能用了。 1. 在工程上右键选择“Edit 工程名字.csproj” 2. 把10240替换成10586 3. 保存工程文件 4. 右键,选择“Reload Project”重新加载工程 5. 成功加载


Windows 10 UWP开发:如何定时触发后台任务

今天在爆UWP的定时后台任务,坑有点多,爆出屎来了。有的坑在很多网上的文章里都没提到,非常的坑。刚刚开荒成功了,把经验写出来分享: 1. 写一个后台任务的类,继承IBackgroundTask接口 通常,在设计应用程序结构的时候,我们会建类库项目(Class Library)放这些类。比如 FarkBackgroundTask.Core 因为是UWP工程,所以建的类库也要是Universal Windows的。注意,这里我们已经埋下了一个巨坑,稍后会解释。 我们的类代码如下: public class SayFarkTask : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance) { Debug.Write("================ …


Windows 10 UWP开发:如何弹出消息通知

在UWP的App中,弹出消息通知的方法和WinRT一致,注意是App内的消息通知(toast notification)而不是从服务器端推送的通知。主要有几个步骤: 1. 创建XML定义 // 1. create element ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01; XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate); 这里面的消息模板有好几种: // // Summary: // 指定要在消息通知中使用的模版。 [ContractVersion(typeof(UniversalApiContract), 65536)] public …


Windows 10 UWP开发:如何实现WP8的Pivot效果

UWP的Pivot控件动画效果和以前Windows 8, Windows Phone 8的Pivot不一样,在切换PivotItem的时候,当前选择的Item的Header并不会跑到第一个去,而是单纯的像Tab选项卡那样高亮当前的Tab而已。 我个人喜欢Windows 8的Pivot,即下面这个GIF这样的(这是我正在开发的一个UWP应用)。如果你也喜欢传统风格的Pivot,可以参考以下方法。 实现方法特别简单,只要拿Blend从WP8.1 Runtime的Pivot里把默认样式导出来,稍微改下就行: <Style x:Key="Windows8PivotStyle" TargetType="Pivot"> <Setter Property="Margin" Value="0"/> <Setter Property=" …


How to Redirect Old Domain URL to New Domain in IIS

When you are changing the domain name for your website, you are definitely going to solve the migration problem. You can not just stop DNS on your old domain, because this will cause your indexed pages being deleted by search engines. The correct way is to tell the search engine that you have a new domain name now, which is when the user access an old URL, redirect it to the new URL. Take my …


Windows 10 UWP开发:自定义标题栏

UWP和WPF以及以前Windows 8.1的WinRT应用有些不一样的地方。首先就是标题栏,以前Windows 8.1的应用都是全屏的,没有标题栏,Windows 10里面应用可以窗口化运行,所以我们也能够利用标题栏做一些定制。本文针对初学者,可能写的比较啰嗦。 一、首先是最基本的,如何改变标题栏及按钮的颜色 标题栏的对象位于Windows.UI.ViewManagement.ApplicationView类里,有个属性是 public ApplicationViewTitleBar TitleBar { get; } 为了能够访问这个属性,我们需要先取得当前应用窗口的view: var view = ApplicationView.GetForCurrentView(); 拿到view对象后,就能对TitleBar属性操作了,标题栏的活动和非活动状态的前景色和背景色可以这样 …


Fix Visual Studio 2015 Razor Editor Blow Up

Visual Studio 2015 has been RTM for one month. However, it blows up very often, such as Razor editor. When I try to open any .cshtml file, it blows up with this error, then the syntax highlight is gone. I tried to uninstall all add-on, even repair install VS2015 can't get it working. The detailed error message is: System.Reflection.TargetInvocationException: Exception has been thrown by the …


如何在IIS管理器(inetmgr)中连接Azure WebSite

我们在Azure上建出来的网站看起来只能用Azure的网页版界面管理,或者Visual Studio的Server Explorer管理。如果想通过IIS的管理界面配置我们的网站,似乎很多小伙伴只能考虑用Azure VM建网站。其实不然。 首先,Windows 8.1的IIS管理器默认情况下确实不能连接Azure,所以要装一个插件:http://www.iis.net/downloads/microsoft/iis-manager 安装完成后,打开你本机的IIS管理器,在File菜单下就会多出来一个: 在Server name里面输入你的Azure网站的SCM地址,即 网站名称.scm.azurewebsites.net:443 Site name一定要和网站名称一致 然后去Azure Portal上download一个publish profile 在这个 …


浦发网银插件导致Surface Pro 3不断蓝屏的解决办法

安装浦发网银插件后,Windows 8.1 64位版的系统在部分机器上一开机就蓝屏,比如Surface Pro 3,蓝屏消息是: IRQL_NOT_LESS_OR_EQUAL 这通常是驱动问题导致的。连续启动失败2次后,Windows 8.1会自动进入高级启动,可以用安全模式进系统WINDBG一下dump文件,发现是一个叫peckp_x64.sys的驱动爆的。这个驱动是浦发银行网银插件的一部分,是用来保护键盘输入的,也就是防止键盘记录的盗号木马,但是和Surface Pro 3的驱动冲突,所以导致开机蓝屏。 解决办法如下: 1. 将Windows 8.1启动到安全模式,Surface Pro 3的bitlocker recovery key可以用一台能翻墙的电脑到 onedrive.com/recoverykey 里去找。 2. 在控制面板,程序和功能里,按正常办法卸载浦发插 …


Azure Website Showing 404 for .woff Fonts in IE

If you are using Website on Microsoft Azure (Currently renamed to Web Apps), you will find the .woff web font is not working in IE, it returns 404. Based on my experience, this is because IIS is not configured to use the correct MimeType. However, we can not operate the IIS on Azure, there's no RDP into an Azure Web Apps backend machine. How can we do that? In fact, after IIS7, the MineType is …


如何高逼格读取Web.config中的AppSettings

先插句题外话,下版本的ASP.NET貌似把web.config撸掉了,都变成json了。所以本文讨论的内容可能以后用不到了,但是一些设计思想还是可以用的~ 直接进入正题,在ASP.NET网站里(也包括其他有web.config, app.config)的.NET工程里,读AppSettings的值是个很常见的场景。比如: <add key="EnableAzureWebTrace" value="true"/> 在代码里读的时候就会用到: ConfigurationManager.AppSettings["EnableAzureWebTrace"]; 这个[]索引器返回的是string类型。所以下一步我们通常需要类型转换才能在代码里拿来用。比如这个例子里,我们就要转换成bool。其他时候,可能要转换为int等类型。 string …


Azure SQL数据库如何做定期自动备份

Azure上的数据库可以通过手工export来备份,方法我在博客里写过。但是如果要求定期做的话,需要人工参与。偷懒的做法是用Azure自带的定期备份功能。 1. 在Azure Portal点开你的数据库,切换到CONFIGURE页面。 Automated Export的意思就是自动导出数据库(bacpac格式),默认是NONE,也就是不自动备份。选择AUTOMATIC。 2. 选完之后,下面会出来详细设置。 STORAGE ACCOUNT选你要保存备份文件的存储账户。FREQUENCY是频率,这个例子里我选择每28天备份一次,从2015年4月2日12:00A.M.开始。保留90天内的备份(这个选项的意思就是备份文件多久以后会被自动删除) 另外,还需要填写SQL数据库服务器的登录账户和密码。然后保存设置就完成了! 3. 一旦到了指定时间,触发了备份。你就能在你刚才设置的存 …


Azure SQL数据库Web Tier爆了,如何迁移数据库

今天做了次数据库迁移,目的是开个最新版的Azure SQL Database(V12 Update),然后把博客的数据库迁移到新的server上去。按以往的做法(也就是我曾经写过的《图解:如何将SQL Server数据库迁移到SQL Azure 》),把bacpac文件下载下来,然后import到新的数据里,结果爆了: 爆炸是因为Web Tier和Business Tier在最新版的Azure上面已经被微软撸掉了,SSMS 2014却没有升级,不认识这两个Tier,还在用老的Web Tier。 TITLE: Microsoft SQL Server Management Studio ------------------------------ An exception occurred while executing a Transact-SQL statement or …


如何获得Windows 8.1中已记住的WIFI的明文密码

网上广为流传的方法只能看当前连接着的WIFI的密码,就像这样。是看不到其他被Windows记住的WIFI连接的密码的。Windows 8.1的设置App里也只能删除已记住的WIFI,不让你看密码。 其实,就算你没有连接着那个WIFI,还是有办法看密码的。 1.用管理员权限运行cmd或者powershell,执行: netsh wlan show profiles 显示已被Windows保存的所有WIFI名称的列表 2. 执行这条命令获得明文密码: netsh wlan show profile name=“WIFI名称” key=clear 如果你足够蛋疼,你还可以写个脚本遍历机器上所有的WIFI,得到他们的密码,然后存个txt什么的,你们懂的。


Get Clear Password from IIS App Pool

Sometimes, in order to get necessary permissions, we will assign domian accounts or local accounts for IIS app pool. For example, it usually happens for SharePoint deployment. However, this is not a secure way, because the password for these accounts are saved in clear text. For local accounts, the password is not readable. But if you are using domain accounts. The IIS Admin can read your …


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等技术。和我最早研究计算机一样,我并没有把赚钱当作目的和目标,而是纯粹的兴趣,所以至今我 …


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

以前在Silverlight Runtime下,要设置一个最小化(缩紧)的工具栏,给ApplicationBar设置Mode属性为Minimized就行 <shell:ApplicationBar IsMenuEnabled="False" Mode="Minimized"> 到了Windows Phone 8.1运行时下,这个Mode属性木有了。就算你不加任何按钮或菜单,在XAML设计器里起来是最小化了,运行时还是会展开的。比如这段代码: <Page.BottomAppBar> <CommandBar Background="#0072BC" Foreground="White" /> </Page.BottomAppBar> 在XAML设计器里的效果: 运行时的效果: 草草草草草。。。 查了下 …


如何解决AngularJs在IE下取数据总是缓存的问题

如果用AngularJs在IE下发出GET请求从后台服务取完Json数据再绑定到页面上显示的话,你可能会发现就算数据更新了,IE还是会显示原来的结果。实际上这时候IE的确是缓存了hashtag,没有再次去做Http GET请求最新的数据。 最直接的办法是在后台撸掉OutputCache,但这种做法并不推荐,需要改每一处被Angular调用的地方,代价太大。这种问题应该在前端解决最好。研究了一会儿总结了最有效的解决方法,并不需要改后台代码了。 在你的app config里撸一个$httpProvider进去,比如像我这样,和路由可以配在一起,当然分开配也没问题。 var config = ["$routeProvider", "$httpProvider", function ($routeProvider, $httpProvider) { // …