Visual Studio

在 Visual Studio 中调试 XAML 设计时异常

在 Visual Studio 中进行 WPF, UWP, Silverlight 开发时,经常会遇到 XAML 设计器由于遭遇异常而无法正常显示设计器视图的情况。很多时候由于最终生成的项目在运行时并不会出现同样的异常,我们往往会忽略设计时异常,仅仅通过关闭设计器在设计时执行代码的功能来规避设计器异常的问题。 规避设计时异常 规避设计时异常,一般有两种做法: 关闭设计器执行代码 在 Visual Studio 2015 中,XAML 设计器左下角的这个按钮可以随时开启或关闭设计器执行代码。如果在 UI 相关的代码中存在问题,而设计器不去执行,就不会造成设计器异常。但代价是无法在设计器中预览数据绑定等效果。 判断设计时还是运行时 另一种做法是在代码中检测当前代码是否运行在设计时中,

  • Void²
    Void²
4 min read
UWP

在 UWP 应用中创建、使用、调试 App Service (应用服务)

在 Windows 10 中微软为 UWP 引入了 App Service (即应用服务)这一新特性用以提供应用间交互功能。提供 App Service 的应用能够接收来自其它应用传入的参数进行处理后返回数据。 创建应用服务 要使应用支持提供 App Service 非常简单。只需正确配置应用的清单文件后添加服务相关的代码即可。 配置应用清单文件 打开项目中的 Package.appxmanifest 文件。 切换到 Declarations 选项卡。 在左侧 Available Declarations 中选择 App

  • Void²
    Void²
12 min read
UWP

UWP 应用获取各类系统、用户信息 (2) - 商店授权信息、零售演示模式信息、广告 ID、EAS 设备信息、硬件识别信息、移动网络信息

应用开发中,开发者时常需要获取一些系统、用户信息用于数据统计遥测、问题反馈、用户识别等功能。本文旨在介绍在 Windows UWP 应用中获取一些常用系统、用户信息的方法。示例项目代码可参见 Github: https://github.com/validvoid/UWP-SystemInfoCollector 由于涉及内容较多,故本文会分为多篇展开。本篇为系列第二篇,介绍如何获取商店授权信息、零售演示模式信息、广告ID、EAS 设备信息、硬件识别信息、硬件设备信息以及移动网络信息。 商店授权信息 Windows.ApplicationModel.Store 命名空间提供了与 Windows

  • Void²
    Void²
13 min read
Windows 10

UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

应用开发中,开发者时常需要获取一些系统、用户信息用于数据统计遥测、问题反馈、用户识别等功能。本文旨在介绍在 Windows UWP 应用中获取一些常用系统、用户信息的方法。示例项目代码可参见 Github: https://github.com/validvoid/UWP-SystemInfoCollector 由于涉及内容较多,故本文会分为多篇展开。本篇介绍获取设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息。 AnalyticsInfo Windows.System.Profile 命名空间下的 AnalyticsInfo 类负责提供用于设备分析的相关信息。通过此类,我们能够获得系统的具体版本号以及设备类型等信息。 通过 AnalyticsInfo

  • Void²
    Void²
14 min read
UWP

Windows Composition API 指南 - 认识 Composition API

微软在 Windows 10中 面向通用 Windows 应用 (Universal Windows Apps, UWA) 新引入了一套用于用户界面合成的 API:Composition API。Composition API 将使开发者使用更少量的代码在通用 Windows 应用实现更为炫丽的界面效果。本系列文章会对该套 API 的由来、用途以及使用方法进行介绍。 什么是 Composition API 简单来说,Composition API 就是一套在桌面窗口管理器(Desktop Window Manager,

  • Void²
    Void²
9 min read
UWP

Win2D 官方文章系列翻译 - 预乘 Alpha

在计算机绘图中有两种表示颜色值不透明度的方法。Win2D 中两种方法均有所采用。本文旨在解释两种方法之间的区别以及其各自的使用场景。 直接 Alpha (Straight alpha) 当使用直接,亦即线性 Alpha 时: RGB 值指定绘制目标的颜色 Alpha 值指定绘制目标的质密程度 在该方法中,RGB 和 Alpha 通道各自独立发挥作用。它们可以在不互相影响的情况下各自发生改变。要使一个对象淡出,只需保持 RGB 取值不变,逐步减小 Alpha 值即可。 以直接 Alpha 格式实现两种颜色的 Source-over

  • Void²
    Void²
4 min read
UWP

Win2D 官方文章系列翻译 - 像素格式

DirectXPixelFormat 枚举 包含了 Direct3D 和 DXGI 所使用全部各种像素格式,但其中只有部分被 Win2D 所支持 (或被 Win2D 构建的基础—— Direct2D 所支持)。 如果不确定该采用哪种格式,默认选择 B8G8R8A8UIntNormalized 作为像素格式以及 Premultiplied 作为 CanvasAlphaMode (场景 Alpha 模式)适用于大多数场景。 以下列出的所有格式均被 Direct3D 特性等级 11 的 GPU 硬件(

  • Void²
    Void²
2 min read
UWP

Win2D 官方文章系列翻译 - 与 Direct2D 互操作

Win2D 作为 Direct2D 的上层实现,支持与其进行双向互操作。如果你有一个 Win2D 对象,你可以访问到用以实现它的原生 Direct2D 对象;而如果你有一个 Direct2D 对象,只要包装该 Direct2D 对象的 Win2D 对象存在,你也能查找到此 Win2D 对象,或者,当 Win2D 包装对象不存在时,你也可以手动创建一个新的包装器。 互操作使你能够混合搭配使用 Win2D 与 DirectX API。你可以编写一个

  • Void²
    Void²
4 min read
WinRT

Windows Store 应用获得设备 ID 的几种方案

通过生成唯一的设备 ID 进行数据统计是应用开发中一个非常常见的需求,然而自从 WP 7.8 开始,WP 平台上就无法再获得一个唯一的,不变的,且不同应用间一致的设备 ID 了。本文总结了几种在 Windows Store 平台上用于统计设备 ID 的方案,开发时可以根据具体需求进行选用。 1. 广告 ID 广告 ID 主要用于通过分析用户安装了哪些应用并如何使用来优化广告推送的相关性和频率等行为,同时也用于检测广告欺诈以及其它一些安全问题。 public static string AdvertisingId { get;

  • Void²
    Void²
7 min read
UWP

Win2D 官方文章系列翻译 - 调整控件分辨率

本文旨在讲解如何配置 Win2D XAML 控件使用的分辨率。下文将介绍如何: 使 Win2D 控件运行在固定的分辨率。 通过调整控件 DPI 减少渲染像素数以增强性能。 分辨率与控件缩放 本文中所用的“分辨率”一词,是指位图的尺寸(高宽)。 Win2D XAML 控件绘制的对象均有分辨率和 DPI 这两项属性。对象的 DPI 指示了绘制时其构成像素的密度。 DPI 就像缩放因数 —— DPI 越高则绘制对象构成的像素数越多;反之,DPI 越低,其构成像素数就越少。

  • Void²
    Void²
5 min read
UWP

Win2D 官方文章系列翻译 - 处理设备丢失

“设备丢失”是指 GPU 设备失效无法继续进行渲染的情况。GPU 硬件故障、驱动程序缺陷、驱动程序软件更新或者从一个 GPU 切换到另一个都可能导致此问题。丢失的设备无法使用,此时任何尝试使用设备的 Win2D 都会引发异常。要解决这一问题,应用必须创建新设备再重新创建所有图形资源。 并非所有应用都需要操心如何解决设备丢失的情况。设备丢失是一种比较少见的情况(但愿如此),所以某些开发者就任由应用在此类情况发生时崩溃了。而本文正是为另一些希望应用足够健壮,能够处理设备丢失问题的开发者准备的。 使用 XAML 控件时设备丢失的处理 Win2D (CanvasControl, CanvasVirtualControl and CanvasAnimatedControl)控件能够代替应用自动应对设备丢失的情况。 当检测到设备丢失,这些控件会重建它们的

  • Void²
    Void²
3 min read
UWP

Win2D 官方文章系列翻译 - DPI (每英寸点数)和 DIPs(设备独立像素)

本文旨在解释物理像素与设备独立像素(DIPs, device independent pixels)之间的区别,以及 Win2D 如何处理 DPI (dots per inch/每英寸点数)。 Win2D 被设计为可以自行感知设备环境,以便在各种高低不同 DPI 的设备上呈现正确的视觉表现,故多数应用可以忽略 DIPs 和 DPI 之间的区别。如果你的应用有更多特定需求,或者你希望自行定制默认的感知行为,可以继续阅读下文详述…… 什么是 DPI? DPI 代表“每英寸点数”,该数值可以粗略度量计算机显示器或手机屏幕等显示输出设备上呈现的像素密度。

  • Void²
    Void²
8 min read
UWP

Win2D 官方文章系列翻译 - 避免内存泄漏

在托管 XAML 应用中使用 Win2D 控件时,必须谨慎处理对象引用计数,以免控件不能被垃圾回收器回收。 内存泄漏的发生条件 你正在通过 C# 等 .Net 语言 (非原生 C++)使用 Win2D 你使用了以下任一 Win2D 控件: CanvasControl CanvasVirtualControl CanvasAnimatedControl CanvasSwapChainPanel 你订阅了 Win2D 控件的事件(如 Draw, CreateResources, SizeChanged...) 你的应用在多个 XAML

  • Void²
    Void²
4 min read
UWP

Win2D 官方文章系列翻译 - 幕后绘制

应用有时需要将图形绘制到并不立即显示的目标上。此类绘制动作被称作“幕后绘制”或“绘制到纹理”。当应用需要将绘制操作输出保存到一个文件、返回为一个像素数组或留作后续操作的输入源时,常需要进行这种幕后绘制。 通过使用 Win2D 中的 CanvasRenderTarget 可以轻松实现以上场景。 CanvasRenderTarget 派生自 CanvasBitmap ,包含一个名为 CreateDrawingSession() 的方法。是用 CreateDrawingSession 方法可以把图形内容绘制到一个 CanvasRenderTarget。例如: CanvasDevice device = CanvasDevice.GetSharedDevice(); CanvasRenderTarget offscreen = new CanvasRenderTarget(device,

  • Void²
    Void²
2 min read
Visual Studio

妙用 Visual Studio 2015 实时可视化树

最近和朋友闲聊时提到 Windows 10 上新的必应新闻应用,我们都比较好奇它的新闻列表布局是怎么做的,故想探究一番。一开始还是按照以往思路,解开 WindowsApps 目录的权限,进入应用的安装目录,打算反编译,后来一想,现在应用都是 .net native 的,这招行不通了啊!后来灵机一动,想起来 Visual Studio 2015 的新功能:实时可视化树。 启动实时可视化树 第一步: 以管理员权限启动 Visual Studio 2015,不要打开任何项目 。 第二步:

  • Void²
    Void²
5 min read