lindexi

林德熙 - Windows 10 App Developer

林德熙

开源实战

本文记录我参与的开源项目

WPF 从文件加载字体

本文告诉大家从文件加载字体的方法。在 wpf 使用 FontFamily 显示指定的 ttf 文件来显示字体

修复 SmartAssembly 混淆 .NET 6 时提示 Unable to load runtime config file 失败

本文告诉大家如何修复使用 SmartAssembly 7.5 混淆 .NET 6 应用时提示 Unable to load runtime config file 失败

WPF 开启Pointer消息存在的坑

本文记录在 WPF 开启 Pointer 消息的坑

WPF dotnet core 如何开启 Pointer 消息的支持

在 WPF 下,可以使用和 UWP 一样的 Pointer 触摸架构,只是开启的方式和 .NET Framework 版本有细微的差异

开源项目

这是我收藏的开源项目

dotnetCampus.UITest.WPF 一个支持中文用例的界面单元测试框架

本文来安利大家一个支持使用中文做用例名的 WPF 界面 UI 单元测试框架

WPF 双向绑定到非公开 set 方法属性在 NET 45 和 NET Core 行为的不同

本文记录 WPF 在 .NET Framework 4.5 和 .NET Core 3.0 或更高版本对使用 Binding 下的 TwoWay 双向绑定模式绑定到非公开的 set 属性上的行为变更

WPF 使用 Silk.NET 进行 DirectX 渲染入门

本文告诉大家如何使用 dotnet 基金会新开源的 Silk.NET 库调用 DirectX 进行渲染的方法。此库是对 DirectX 的底层基础封装,用上了 dotnet 和 C# 的各个新特性,相对来说基础性能较好,也许后续可以考虑作为 SharpDx 的代替

VisualStudio 各版本 msbuild 路径

本文收藏各个版本的 MSBuild 文件默认所在的路径

dotnet core 应用是如何跑起来的 通过AppHost理解运行过程

在 dotnet 的输出路径里面,可以看到有一个有趣的可执行文件,这个可执行文件是如何在框架发布和独立发布的时候,找到 dotnet 程序的运行时的,这个可执行文件里面包含了哪些内容

探索 dotnet core 为何在 Windows7 系统需要补丁的原因

在一些 Windows 7 系统上,根据 dotnet 官方文档,需要安装上 KB2533623 补丁,才能运行 dotnet core 或 .NET 5 等应用。尽管非所有的设备都需要安装此,但这也让应用的分发不便,安装包上都需要带上补丁给用户安装。此补丁同时也要求安装完成之后重启系统,这对用户端来说,也是较不方便。本文来聊聊为什么 dotnet core 一系的框架依赖于此补丁

dotnet 使用 WpfAnalyzers 辅助分析 WPF 应用代码缺陷

引入 WpfAnalyzers 代码分析工具,相当于给团队加入一个免费的代码审查工具人,可以帮忙在日常开发找到很多代码缺陷。加入 WpfAnalyzers 代码分析工具,可以减少代码编写里的低级缺陷,提升开发质量

dotnet OpenXML 文本 BodyProperties 的属性作用

本文收集 a:bodyPr 文本框属性 BodyProperties 的属性的作用

Office 使用 OpenXML SDK 解析文档博客目录

本文收集 Office 解析相关博客

WPF 修复 dotnet 6 与源代码包冲突

在 dotnet 6 时,官方为了适配好 Source Generators 功能,于是默认就将 WPF 的 XAML 构建过程中,引入第三方库的 cs 文件,这个功能默认设置为开启。刚好源代码包为了修复在使用 dotnet 6 SDK 之前,在 WPF 的构建 XAML 过程中,不包含第三方库的代码文件,从而使用黑科技将源代码包加入到 WPF 构建 XAML 中。在 VisualStudio 升级到 2022 版本,或者是升级 dotnet sdk 到 dotnet 6 版本,将会更新构建调度,让源代码包里的代码文件被加入两次,从而构建失败

dotnet OpenXML 文本 BodyProperties 的 FontScale 与文本字号缩放

本文来告诉大家,在 OpenXML 的 BodyProperties 的 NormalAutoFit 的 FontScale 属性缩放文本框的文本字号的方法

dotnet 代码调试方法

本文将会从简单到高级,告诉大家如何调试 dotnet 的代码,特别是桌面端。本文将会使用到 VisualStudio 大量的功能,通过各种好用的功能提高调试方法

dotnet OpenXML WPF 解析实现 PPT 文本描边效果

本文是使用 WPF 做个 PowerPoint 系列的博客,本文来告诉大家如何解析 PPT 里面的文本描边效果,在 WPF 应用中绘制出来,实现像素级相同

SharpDx 的代替项目

现在 SharpDx 已经不维护了,如果还需要在 C# 使用 Dx 相关技术,可以使用本文列出的替代项目

WPF 给 Pen 的 DashStyle 设置 0 0 的虚线数组将会让渲染线程消耗大量 CPU 资源

给 WPF 的 Pen 的 DashStyle 属性设置 0 0 的虚线,在绘制几何图形时,绘制的几何图形的尺寸将关联渲染线程所使用的 CPU 资源。大约在周长大于 500 时,将可以从任务管理器上看到高 CPU 占用

WPF 使用 SharpDx 渲染博客导航

我写了很多在 WPF 使用 SharpDx 渲染的博客,但是有小伙伴吐槽说这些博客没有一个好看的顺序,我将所有的 SharpDx 的博客按照顺序放在下面

WPF 模拟 WPFMediaKit 的 D3D 配置用来测试4k性能

本文告诉大家我在测试 WPFMediaKit 的 D3D 配置性能影响在 4k 分辨率设备下采用高清摄像头的性能

使用 Silk.NET 创建 OpenGL 空窗口项目例子

本文告诉大家如何使用 Silk.NET 创建 OpenGL 空窗口项目。在 dotnet 基金会下,开源维护 Silk.NET 仓库,此仓库提供了渲染相关的封装逻辑,包括 DX 和 OpenGL 等等的封装,利用此封装可以用来代替原有的 SharpDx 等库。这是一个全新写的项目,使用上了 dotnet 和 C# 很多新的特性,相对来说也很活跃,我准备开始入坑这个项目

SharpDx D3D9 的颜色 Format 和 WPF 的 PixelFormat 转换方法

本文告诉大家在 DirectX 9 的颜色格式 Format 和 WPF 的 PixelFormat 转换方法

dotnet 5 判断当前程序运行在 Windows 系统 Linux 系统的简单方法

本文告诉大家使用 dotnet 5 提供的 System.OperatingSystem 类的方法进行快速且简单判断当前程序所运行在的系统

WPF 使用 SharpDX 在 D3DImage 显示

本文告诉大家如何使用 SharpDX 在 D3DImage 显示。在上一篇WPF 使用 SharpDX只是使用窗口,也就是无法使用其它的 WPF 控件。所以这一篇就来告诉大家如何使用 WPF 控件和使用 SharpDX 。

dotnet format 忽略生成代码的格式化

我给团队引入了自动格式化代码机器人,这个机器人有点傻,会将生成的代码也进行格式化,每次都会我的代码生成工具打架。为了让这两个机器人和好,我探索了让 dotnet format 忽略对生成代码进行自动格式化的方法

wpf 单例

本文告诉大家如何做一个 wpf 单例程序。单例就是用户只能运行这个程序一次,也就是内存只有存在这个程序一个。

dotnet 通过 DockerfileContext 解决项目放在里层文件夹导致 VisualStudio 构建失败

本文告诉大家,如何解决 csproj 项目文件放入到里层的文件夹,不放在 sln 所在文件夹的第一层子文件夹,导致 VisualStudio 2022 在构建 docker 映像提示找不到文件的问题

WPF 旋转太极

旋转的太极包含了这个世界的秘密,无论用啥录屏软件或者视频制作软件,都不好做出我期望的效果,于是我自己用代码写了一次,可以自己控制所有的逻辑。本文告诉大家如何使用 WPF 写一个旋转的太极

WPF 布局 在有限空间内让两个元素尽可能撑开的例子

我在尝试写一个显示本机 WIFI 热点的账号和密码的控件,要求此控件在有限的空间内显示。但是尽可能显示出热点的账号和密码。而热点的账号和密码是用户配置的,也许长度很长。我的需求是在假如账号的长度较短的时候,将剩余的空间尽可能给到密码的显示。反过来,在密码长度比较短的时候,将剩余的空间给到账号的显示。如果两者的长度都比较长,那么同时限制两者的最大尺寸

dotnet 6 引用 NAudio 的旧版本构建不通过

本文告诉大家在使用 NAudio 的旧版本导致构建不通过问题,解决方法是升级到 1.10 或以上版本

WPF 引用第三方库的控件在设计器加上设计时数据和属性

本文告诉大家如何在 VisualStudio 2022 的 XAML 设计器中,在设计时给第三方控件加上设计用的属性和数据的方法

dotnet 根据基线包版本实现库版本兼容

本文来告诉大家如何根据 基线包版本 的功能来实现自动在构建过程中,告诉开发者,当前版本是否存在不兼容旧版本的变更。其不兼容变更包括二进制中断变更和 API 不兼容变更和源代码中断变更。可以让库开发者花更少的精力在测试兼容性上