Edi Wang

All Posts 286


Windows 10 UWP开发:如何不让界面卡死

自从.NET 4.5开始,C#多了一对新的异步关键词 async 和 await,如果不了解的朋友可以简单的看下下面的示意图。 简单的说,就是在通常情况下,用户在界面上进行的操作,比如点击一个按钮之后,如果进行大量的计算,或者读写文件、网络请求等耗时的操作,那么程序的界面就会卡住,在这段时间里,任何交互都不会响应,直到后台的代码执行完毕才会继续响应用户操作。 这种现象和你的应用是不是UWP没有什么卵关系,WinForm,WPF,Windows Phone SL/RT应用都会有这个问题。 这个问题的原因是因为这些耗时的操作和界面(UI线程)没有关系,但却在UI线程上执行了。解决办法就是...

asyncawaitWindows 10UWP

Sharing Image in Windows 10 UWP

Windows 8开始,Windows Store应用的一大特色就是可以通过Charm Bar里面的Share功能把数据分享到另一个应用。虽然在Windows 10里面,Charm Bar已经被撸掉了,但是分享的接口还在,还是可以从屏幕右边弹出和Windows 8一样的分享界面出来。 比如我昨天更新的《描图》应用,就可以将墨迹分享到OneNote、Outlook等应用中去。 今天我给《上海轨道交通》也添加了分享站层图的功能。下面就是实现过程。 首先,Windows Store应用的分享,用的是DataTransferManager对象。在要分享数据的页面里先爆一个全局变量出来: DataTransferManager dataTransferManager = DataTrans...

Windows 10UWP

T-SQL合并多对多表的数据

最近在整理博客的数据,需要做一个操作就是合并文章的分类。我的博客中文章和分类是多对多的关系。即一篇文章可以属于多个分类,一个分类可以包含多篇文章。这是一个很典型的多对多关系,我用的是一个多对多的表,做联合主键关联这些数据。 就像这样: 我需要做的是把“DotNetBeginner”这个分类的文章移到“CSharpAndDotNet”分类里去。但是因为原先在“DotNetBeginner”里的文章有些也是属于“CSharpAndDotNet”的,所以直接Update关联表的话,会产生重复的联合主键,就会爆。 直观一点看,写个SQL语句查询出原分类(DotNetBeginner)和目...

SQLSQL ServerT SQL

Windows 10 UWP开发:获取系统字体及字符

以前WPF里有个{x:Static Fonts.SystemFontFamilies}可以很方便的绑定系统字体列表,结果UWP里被微软撸掉了,Stupid! 这两天写了个UWP版的字符映射表APP,正好要用到字体功能,于是研究了一下。 在UWP里获取系统字体必须得用DirectX渲染,没错,就是做游戏用的那个DX。 从NuGet引这3个包: "SharpDX": "3.0.1", "SharpDX.Direct2D1": "3.0.1", "SharpDX.DXGI": "3.0.1" 然后写个InstalledFont类: 这个类的代码是我改进过的,SharpDX官方的代...

Windows 10UWPDirectX

Windows 10 UWP开发:页面导航及后退的处理技巧

这篇文章主要总结一下Windows 10 UWP开发中关于页面导航及后退按钮的一些省时省力的技巧。 一、页面导航 导航到另一个页面,用的是Frame的Navigate方法,parameter参数是可选的: public System.Boolean Navigate(Type sourcePageType, System.Object parameter); 比如你的目标页面是TargetPage.xaml,通常类型就是TargetPage,所以就可以这样搞: Frame.Navigate(typeof(TargetPage), ParametersObject); 在目标页面接受...

Windows 10UWP

How to Make Circular Avatar in Windows 10 UWP

Once upon a time, all user's avatar used to be square. Since Apple's design, now a lot of apps and websites would use a circular avatar instead of a squre one. This is how we used to make square avatar: Starting from Windows 10, Microsoft became the biggist Apple fans, so they changed avatars to circular in Windows system. So how ca...

Windows 10UWP

Windows 10 UWP开发:如何去掉ListView默认的选中效果

开发UWP的时候,很多人会碰到一个问题,就是ListView在被数据绑定之后经常有个默认选中的效果,就像这样: 而且它不仅会选中,还会触发一次SelectionChanged事件,当然,我们要让ListView可点击,一种流行的做法确实是用SelectionChanged事件,就像这样: private void StationsList_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { var station = StationsList.SelectedItem as Station;...

Windows 10UWP

Windows 10 UWP开发:支持异步的全局异常处理和堆栈信息

我们写UWP应用的时候难免遇到未处理的异常,不然你的应用就会在用户面前闪退,非常没有逼格。然而Windows.UI.Xaml.Application的UnhandledException事件里面有个巨坑,就是它不能处理async异步方法里的异常。注释里也没提到这回事: // // Summary: // Occurs when an exception can be handled by app code, as forwarded from a native-level // Windows Runtime error. Apps can mark the occur...

asyncExceptionWindows 10UWPStackTrace

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

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

Windows 10UWP

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

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

Windows 10UWP