Edi Wang

.NET and Azure Developer

Windows

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 deviceInfo = new …
Windows UWP

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

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

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 UWP

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

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

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 enum …
Windows UWP

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塞在App.xaml的Resources下面就可以全局使用了。 我改了这么几个地方: 一个是所有的PhoneOOXXBrush,我都换成了对应的UWP的Bursh比如PivotForegroundThemeBrush不然运行时候直接爆炸。 另一个是 给 …
Windows UWP

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属性操作了,标题栏的活动和非活动状态的前景色和背景色可以这样设置, …
Windows UWP

如何让应用程序要求以管理员身份运行(C#)

从Windows Vista开始,为了防止操作系统被恶意软件菊爆,Windows加入了UAC机制,在没有关闭UAC的时候,用户的程序都没有管理员权限去执行。但是如果软件需要做一些操作,比如读写注册表,就需要以管理员身份启动。然而普通用户并不清楚这一点,这有可能导致我们的程序被差评,如果是个妹子,发现你的软件不能用,那你连好人卡都收不到了。 幸好,用.NET开发的程序可以很方便的做到自动要求以管理员身份运行。 首先为了达到演示效果,我需要在程序界面上通知当前环境是不是以管理员身份运行,为此我找了一个UACHelper,这个东西挺实用的,就算不是以管理员身份运行的,也不会在用户面前直接爆掉。 public static class UacHelper { private const string uacRegistryKey = "Software\\Microsoft\\ …
C# Windows UAC

使用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

VS2012在Surface RT上远程调试App

最近蛋疼,所以废话不多,直接切入正题。首先这次要说的是Surface RT,是RT版的,ARM处理器的,别弄错了。我们要做的是把工作机上写好的程序放在Surface RT远程调试,而不是在本机和模拟器中运行。 第一步,在Surface RT上安装微软官方的debugger:http://go.microsoft.com/?linkid=9810474 这个debugger是桌面环境下运行的,安装的时候需要管理员权限。 装完以后,开始屏幕上会出现这两个图标,我们要用的是第一个:Remote Debugger。 启动Remote Debugger,正常情况会让你配一些Windows防火墙,你可以完全按照向导来,最终会出现一个Monitor对话框,证明debugger已经在监听连接了。 接下来有个比较有技巧的地方,如果你的Surface RT上的当前用户和开发程序的机器的登录帐户不一样,建 …
Debug Visual Studio Windows Surface ARM