摘要: Windows 10 自 1703 开始引入第二代的多屏 DPI 机制(PerMonitor V2),而 WPF 框架可以支持此第二代的多屏 DPI 机制。 本文将介绍 WPF 框架利用第二代多屏 DPI 机制进行高 DPI 适配的方法。同时,也介绍低版本的 WPF 或者低版本的操作系统下如何做兼容 阅读全文
posted @ 2018-10-28 18:35 walterlv 阅读(809) 评论(0) 推荐(0) 编辑
摘要: 本文将介绍 Windows 系统中高 DPI 开发的基础知识。由于涉及到坐标转换,这种转换经常发生在计算的不知不觉中;所以无论你使用哪种 Windows 下的 UI 框架进行开发,你都需要了解这些内容,以免不断踩坑。 <!-- ![Windows 高 DPI 应用开发课件](/static/post 阅读全文
posted @ 2018-10-28 16:51 walterlv 阅读(1422) 评论(0) 推荐(0) 编辑
摘要: 我们在 WPF 中使用绑定时可以使用 ElementName=Foo 这样的写法,并且还能够真的在运行时找到这个名称对应的对象,是因为 WPF 中提供了名称范围概念。 实现 INameScope 接口可以定义一个名称范围。无论你使用 Name 属性还是使用 x:Name 特性都可以在一个名称范围内指 阅读全文
posted @ 2018-10-28 13:01 walterlv 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 在 Binding 中使用 ElementName 司空见惯,没见它出过什么事儿。不过当你预见 ContextMenu,或者类似 Grid.Row / Grid.Column 这样的属性中设置的时候,ElementName 就不那么管用了。 本文将解决这个问题。 本文内容 以下代码是可以正常工作的 阅读全文
posted @ 2018-10-28 11:47 walterlv 阅读(478) 评论(0) 推荐(0) 编辑
摘要: .NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的。不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数。 你可能会觉得这样没有什么用,不过如果你的应用程序在不同的编译条件下有不同的启动代码,或者你需要持续去大范围修改启动代码,那么做一 阅读全文
posted @ 2018-10-28 11:41 walterlv 阅读(1245) 评论(0) 推荐(1) 编辑
摘要: Task 自带有很多等待任务完成的方法,有的是实例方法,有的是静态方法。有的阻塞,有的不阻塞。不过带超时的方法只有一个,但它是阻塞的。 本文将介绍一个非阻塞的带超时的等待方法。 Task 已有的等待方法 Task 实例已经有的等待方法有这些: ▲ Task 实例的等待方法 一个支持取消,一个支持超时 阅读全文
posted @ 2018-10-28 11:32 walterlv 阅读(1081) 评论(0) 推荐(0) 编辑
摘要: 对象初始化器和集合初始化器只是语法糖,但是能让你的代码看起来更加清晰。至少能让对象初始化的代码和其他业务执行的代码分开,可读性会好一些。 本文将编写一个类型,可以使用集合初始化器构造这个类型。不只是添加元素的集合初始化器,还有带索引的集合初始化器。 稍微提一下对象初始化器 很普通的类型就可以支持对象 阅读全文
posted @ 2018-10-28 11:30 walterlv 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 在 UWP 中使用 CommandBar 来迅速添加一组功能按钮是非常迅速的,是 UWP 中推荐的交互方案之一。也许你能见到 CommandBar 按你所需向下展开,不过可能更多数情况会看到 CommandBar 的展开方向是向上的。 本文将解释 CommandBar 的展开方向逻辑,并且提供多种方 阅读全文
posted @ 2018-10-28 11:14 walterlv 阅读(1413) 评论(0) 推荐(0) 编辑