我们经常会使用条件编译符 #if DEBUG 在 Debug 下执行某些特殊代码。但是一旦我们把代码打包成 dll,然后发布给其他小伙伴使用的时候,这样的判断就失效了,因为发布的库是 Release 配置的;那些 #if DEBUG 的代码根本都不会编译进库中。然而总有时候希望在库中也能得知程序是 Debug 还是 Release,以便库发布之后也能在 Debug 下多做一些检查。 那么有...
如何精准地用打印机在贺卡或邀请函上打字
当你有一堆带有空位的贺卡或邀请函,你是准备手写呢,还是准备打字呢?你的旁边恰巧有一位书法漂亮的 MM 那自不必说,然而如果字都像我这样写得丑,那还是选择打字好了。 然而,贺卡或邀请函不同于白纸,通常都是已经打印好有内容的。那么如何打印以便让所有文字的内容都对应到贺卡或邀请函的正确空位上,还是有些难度的。 本文将教你如何在毫米级别将文字精准地打印到贺卡或邀请函上。 准备:工具 ...
通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)
在 .NET Framework 4.7 以前,WPF 程序的触摸处理是基于操作系统组件但又自成一套的,这其实也为其各种各样的触摸失效问题埋下了伏笔。再加上它出现得比较早,触摸失效问题也变得更加难以解决。即便是 .NET Framework 4.7 以后也需要开发者手动开启 Pointer 消息,并且存在兼容性问题。 本文将通过解读 WPF 触摸部分的源码,分析 WPF 插拔设备触摸失效的...
为修改了链接地址的博客进行重定向
不同于笔记,博客除了给自己带来知识的积累之外,还将知识和思想分享给了互联网上的同道中人。 于是,当我不得不修改博客地址的时候,就不得不考虑地址修改的兼容问题。 博客自发布的那一刻开始,就随时可能被各种奇怪的机构收录: 搜索引擎(喜欢被收录,这样就有更多的人能够获益) 授权的转载站点(虽然目前还没有) 各种泛滥的去除了原作者信息的盗版(比如这里 在Windows10系统...
.NET 中 GetProcess 相关方法的性能
.NET 的 Process 类中提供了查找进程的若干方法,其中部分方法还比较消耗性能。如果你试图优化查找进程相关方法的性能,可能本文分享的一些耗时数据可以作为参考。 性能比较 Process 类中提供了四种查询进程的方法: GetProcesses 获取当前计算机或远程计算机上运行的所有进程。 GetProcessById ...
WPF Applications Stop Responding to Touches after Adding or Removing Tablet Devices
WPF framework handles touch devices and events mostly using its own code and COM components instead of using the windows message loop. Unfortunately, there may be some bugs in the WPF touch handlin...
WPF 绘制对齐像素的清晰显示的线条
此前有小伙伴询问我为何他 1 像素的线条显示发虚,然后我告诉他是“像素对齐”的问题,然而他设置了各种对齐像素的属性依旧没有作用。于是我对此进行了一系列试验,对 WPF 像素对齐的各种方法进行了一次总结。此后在 StackOverflow 中,我回答了 graphics - WPF DrawingContext seems ignore SnapToDevicePixels - Stack O...
C#/.NET 序列化和反序列化 YAML 元数据
我希望能够对我博客中的所有 YAML 元数据进行格式化和自动生成,于是我需要进行一些 YAML 解析和写入的操作。 .NET 并没有原生提供对 YAML 的序列化和反序列化。虽然 YAML 文件的解析并不难,不过如果不是处于特别的理由(比如性能),使用现有的库解析 YAML 是比较好的选择。 本文推荐使用 YamlDotNet 序列化和反序列化 YAML。 YAML 元数据 ...
C#/.NET 读取或修改文件的创建时间和修改时间
手工在博客中添加 Front Matter 文件头可是个相当费事儿的做法,这种事情就应该自动完成。 .NET 中提供了非常方便的修改文件创建时间的方法,使用这种方法,能够帮助自动完成一部分文件头的编写或者更新。 相关类型 .NET 中提供了两个不同的设置创建和修改时间的入口: File 静态类 FileInfo 类 ▲ File 静态类的方法 ▲ File...
Good Framework Rely on Good Api —— Six API Design Principles
We have S.O.L.I.D principles of object-oriented programming, and we also have Software design patterns to solve general, reusable solution to a commonly occurring problem. But we don’t have public-...
WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则
只要你用 XAML 写代码,我敢打赌你一定用各种方式使(nuè)用(dài)过 Grid。不知你有没有在此过程中看到过 Grid 那些匪夷所思的布局结果呢? 本文将带你来看看 Grid 布局中的 Bug。 This post is written in multiple languages. Please select yours: ...
The undefined behaviors of WPF Grid (the so-called bugs)
As long as you write code in XAML, I bet you must have used Grid in various ways. I wonder if you have seen any strange layout results of Grid. I’ll talk about the undefined behaviors of Grid layo...
Introducing MSTestEnhancer to make unit test result easy to read
Don’t you think that naming is very very hard? Especially naming for unit test method? Read this article for more data of naming: Don’t go into programming if you don’t have a good thesaurus - ITwo...
不再为命名而苦恼!使用 MSTestEnhancer 单元测试扩展,写契约就够了
有没有觉得命名太难?有没有觉得单元测试的命名更难?没错,你不是一个人!看看这个你就知道了:程序员最头疼的事:命名 或它的英文原文 Don’t go into programming if you don’t have a good thesaurus - ITworld。 立刻前往 nuget.org 下载安装 MSTestEnhancer 即可解决命名的苦恼。 ...
使 WPF 支持触摸板的横向滚动
微软终于开始学苹果一样好好做触摸板了(就是键盘空格键下面那一大块)。然而鉴于以前没有好好做,以至于 WPF 程序甚至都没有对触摸板的横向滚动提供支持(竖向滚动是直接使用了 MouseWheel,汗……)。但有些功能真希望能够支持横向滚动! 本文将介绍让触摸板支持横向滚动的方法,本质上也是用 MouseWheel,但却支持了横向。 ...
Support Horizontal Scrolling of TouchPad in WPF Application
Finally, Microsoft started to support touchpad like Apple did years ago. As Microsoft never do well in touchpad, WPF application even doesn’t support horizontal scrolling of touchpad. Also, WPF use...
图片点击放大,你的网页也能做到!
我经常在博客中插入大图,然而总需要借助浏览器的滚轮缩放功能放大观看实在是不方便。于是我希望做一个点击即放大的功能。 下面就是一张可点击放大的图片,你可以点击试试!当然,我期望的效果是自动对所有博客中的图片生效。 ▲ Fluent Design App Header 创建一个用于放图片的 HTML 节点 如果你是普通的 HTML 网页,可以将下面的片段放入到你的页面中。 &...
语法高亮不够漂亮?这里有你想要的 Rouge 主题
写了那么久的代码,找到了满意的代码着色风格吗?想必文本编辑器的代码着色风格你已经找到了中意的了,那么你在网上 post 上去的代码呢? Rouge 是一款基于 Ruby 的语法高亮工具,能为你的代码生成漂亮的语法高亮样式。本文将介绍如何使用它,并为大家提供它默认的语法高亮样式预览。 在 Jekyll 中使用 Rouge 语法高亮插件 Jekyll 中的 __config.yml 文...
为博客或个人站点的 Markdown 添加 LaTeX 公式支持
LaTeX 是一套排版系统,原生包含对科学和技术型文档内容的支持,而 LaTeX 公式(LaTeX math and equations)则是这种支持中非常重要的一部分。如果能够在博客或个人站点中使用到 LaTeX 的排版系统,或者说只是其中的数学公式部分,对学术性(或者只是使用到了部分数学原理)文章来说将会非常方便。 本文将推荐一些脚本,以便添加 LaTeX 数学公式的支持。 为站...
为博客添加可切换的暗色和亮色主题
不知从什么时候开始,越来越多的小伙伴喜欢在暗色的编辑器中编写代码;于是写博客的小伙伴们也得在博客中顺应这样的潮流,这样才能更接近平时写代码时的环境。 然而——绝大多数的技术类博客或技术文章都是亮色主题的,代码在其中以和谐但不太好看的亮色存在,或者扎眼但熟悉的暗色存在。这始终觉得不那么舒适。 于是,作为博主,我决定考虑添加亮色和暗色两种主题色的支持。如果你也喜欢这样的方式,可以读一读本文,...
转义,解决花括号在 Jekyll 被识别成 Liquid 代码的问题
在 DependencyProperty.UnsetValue 的正确打开方式 和 合并 Jekyll 多种类型的页面 这两篇博客中,我都遇到了代码中的花括号被 Jekyll 识别为 Liquid 代码的问题。 然而 Liquid 的问题还需 Liquid 来解。 而 Liquid 的 raw 就是用来解决这个问题的。 {% raw %} {% comment %} 这里是各种包含...
合并 Jekyll 多种类型的页面
以前胡思乱想时,有时会讲给小伙伴们听,有时会将想法在微信上发给自己,但多数时候是没有后文的,让胡思乱想烂在脑中。还好多数时候我记得,就像我亲自记得 3 岁时候的一些故事一样。 但今天大脑被一些凌乱的事情撑爆了,心情极度低落。正好近期学着写博客,于是想把一些胡思乱想的事情写在自己的站点上。 阅读本文,将学到如何用 Jekyll 做多种类型的页面,并在首页的列表中将这些不同种类的页面合并按日...
让 GitHub Pages 强制使用 HTTPS(含码云的 gitee/oschina.io)
一天晚上在手机上浏览自己的博客时,发现居然充斥着各种恶心的广告!顿时内心犹如一万只神兽呼啸而过,不过又能怪谁呢?! 为避免引起读者不适,不贴图,只放链接,感兴趣自己点开看:图 2、图 1。 本文的重点其实是括号里的码云(gitee.io)。 GitHub Pages 去自己的 GitHub Pages 仓库页找了找设置项(https://github.com/walterlv/w...
如何搭建一个基于 GitHub Pages 的 Jekyll 静态博客(目录)
GitHub Pages 为个人、组织和项目提供了展示一些页面的方式,GitHub 帮助页的 User, Organization, and Project Pages 页面就有说明。这里,我们使用 GitHub Pages 来搭建自己的博客,正好也是里面说的给 User 用作展示的页面的用途。当然,GitHub 甚至直接在官方页面中告诉大家,你可以用来当作你的博客使用,就是这句 Creat...
[译] 搭建一个托管在 GitHub Pages 的 Jekyll 博客,并添加 Disqus 评论功能
本文翻译自 Setup up a jekyll blog using github pages and disqus comments,原作者 Vincent Daubry。 想不想马上就开始搭建个人博客,简单易学,还好看?这篇文章将教你用 Jekyll 搭建博客,配上一款养眼的主题,然后跑在 GitHub Pages 上。 为什么选用静态的站点生成器? 相比于使用类似 WordP...
使用 C# 代码创建快捷方式文件
快捷方式是一种特殊的文件,扩展名为 lnk。有很多种方式来创建快捷方式,不过使用 C# 代码创建一个却并不那么容易。 本文分享三种不同的方式创建快捷方式。 随处可用的代码 这是最方便的方式了,因为这段代码随便放到一段代码中就能运行: /// <summary> /// 为当前正在运行的程序创建一个快捷方式。 /// </summary> /// <p...
发布了一款库(或工具包),如何持续地编写更新日志(ChangeLog)?
据说程序员最讨厌的两件事是 “别人没有写文档” 和 “要我写文档”。 编写更新日志可是也落入此怪圈呢! 程序员不写文档 来自 GitHub 的开源调查问卷结果直接显示,最令人头痛的莫过于文档了: Incomplete or outdated documentation is a pervasive problem, observed by 93% of responde...
在 GitHub 公开仓库中隐藏自己的私人邮箱地址
GitHub 重点在开方源代码,其本身还是非常注重隐私的。这一点与面向企业的 GitLab 很不一样。 不过,你依然可能在 GitHub 上泄露隐私信息,例如企业内部所用的电子邮箱。 GitHub 对个人隐私的尊重 git 的设定,开发者需要设置自己的邮箱: ▲ git 的邮箱设置(即便是公开的邮箱,我也不在博客里贴出来) 而在 GitLab 上,我们可以很直接地在提交上面看...
WPF 应用完全模拟 UWP 的标题栏按钮
WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式。然而,Windows 上的应用就应该有 Windows 应用的样子嘛,在保证自定义的同时也能与其他窗口样式保持一致当然能最大程度保证 Windows 操作系统上的体验一致性。 本文将分享一个我自制的标题栏按钮样式,使其与 UWP 原生应用一模一样(同时支持自定义)。 在 WPF 使用 WindowCh...
.NET 三个字母究竟应该如何大小写?前面的 “.” 什么时候能够去掉?(.NET Standard / dotnet-core / net472)
本文将解释在 .NET 技术栈中各种不同使用方式下 N E T 三个字母何时大写何时小写;前面的 “.” 什么时候加上,什么时候去掉,什么时候又使用 “dot”。 .NET 在技术文档中 如果你阅读过 https://docs.microsoft.com/zh-cn/dotnet/ 中的多数 .NET 技术文档,你应该几乎已经注意到了,在所有对大小写敏感的地方,NET 三个字母都...