lindexi

林德熙 - 微软最具价值专家和 .NET 基金会成员

林德熙

C# dotnet 使用 AsyncEx 库的 AsyncLock 异步锁

本文来安利大家一个好用的库 AsyncEx 库。这个库有一个强大的功能是支持 AsyncLock 异步锁。小伙伴都知道,在 C# 里面的 lock 关键字,在 2020 年也就是 C# 9.0 都没有让这个关键字能支持锁内部添加异步方法。此时在一些需要做异步线程安全的业务就比较坑了,而 AsyncEx 库提供了 AsyncLock 异步锁的功能,可以支持在锁里面使用异步

dotnet OpenXML 颜色变换

颜色变换是对基础颜色的相关属性的修改。 例如,透明度是与颜色相关的属性。 颜色转换被指定为任何颜色模型标签的子标签,可以在任何颜色加上颜色变换

dotnet OpenXML 如何获取 schemeClr 颜色

颜色是一个大的主题,在 ECMA 376 里面用了 19 页 A4 描述了颜色,但仅是简单的描述。在 OpenXML 定义了 Scheme Color (schemeClr) 是用来表示主题的颜色,可以跟随主题的更改而更改颜色。例如我的文本设置为主题的文本颜色,那么在我更改文档主题的文本色就可以更改我的文本颜色

WPF 自己封装 Skia 差量绘制控件

使用 Skia 能做到在多个不同的平台使用相同的一套 API 绘制出相同界面效果的图片,可以将图片绘制到应用程序的渲染显示里面。在 WPF 中最稳的方法就是通过 WriteableBitmap 作为承载绘制。本文告诉大家如何封装一个支持差量绘制的控件,默认的绘制方法都是每次都是不保存上次绘制的内容,而且清空画布,重新绘制。这样的绘制方法显然效率不够高

WPF 解决 Skia 因为找不到字体而绘制不出中文字符

在 WPF 使用 Skia 做渲染工具,如果绘制的中文都是方块,也许是字体的问题。字体的问题是 Skia 没有找到字体,本文告诉大家如何修复

Roslyn 解决找不到 SolutionDir 属性

在旧版本的 csproj 格式也就是 Franken-proj 格式,可以使用 SolutionDir 拿到当前sln文件所在的文件夹,但是在 SDK Style 格式的项目文件,是拿不到这个属性的,本文告诉大家如何做到兼容之前的逻辑

dotnet OpenXML 如何判断是形状还是文本

在 OpenXML 格式里面,其实不存在文本这个元素,所有都是形状。但是在 PPT 界面看到的文本框是什么呢?其实他是特别的形状。而几乎所有的形状都可以输入文本,因此区分形状和文本的意义不会特别大,只是在做解析的时候才会碰到

ASP.NET Core 警惕可空类型开启之后模型校验失败

在开启 Nullable 可空类型之后,原本可以调用的 API 也许就会提示 400 BadRequest 因为传入参数不合法,模型校验失败,此时将不会进入预期的 API 函数,同时也不会在输出里面找到有用的信息

WPF 使用基于 Chromium 内核的 Microsoft Edge 封装的 WebView2 控件

现在是 2020.08.23 当前这个技术依然是预览版,使用 WebView2 只需要通过 NuGet 安装库,可以支持 Win7 和 Win8 和 Win10 系统,无 IE 依赖。内核使用 Chromium 内核,顶层技术是 Microsoft Edge 封装

WPF 底层 从手指触摸屏幕到笔迹在屏幕显示中间的步骤

整个 WPF 就是一个UI框架,一个 UI 框架最重要的是 交互 和 显示 部分,而书写这个功能将会完全贯穿 WPF 整个框架的功能。本文非入门级博客,本文包含了大量链接博客,阅读本文你将会了解从用户手指触摸屏幕到最终屏幕打印出笔迹的应用程序执行的步骤

WPF 如何确定应用程序开启了 Pointer 触摸消息的支持

因为 WPF 在开启 Pointer 和没有开启的基础表现是几乎相同的,因此从业务层很难了解到当前是否开启了 Pointer 消息。本文从开发者的角度,通过 Windows 消息判断当前是否开启 Pointer 支持

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

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

WPF 最简逻辑实现多指顺滑的笔迹书写

只需不到 150 行代码就能实现一个支持多指顺滑的笔迹书写的应用。当然,这个应用除了笔迹书写外,没有其他任何功能。本文将不会使用 InkCanvas 而是使用更底的方法,通过 Stroke 进行绘制

WPF 启动屏幕键盘

在 Windows 的平板模式下才能自动在获取键盘输入焦点时弹出屏幕键盘,但是 Windows 的屏幕键盘做的粗糙,有时候不会自动开启屏幕键盘,此时需要使用代码辅助

C# 纯控制台创建一个全屏窗口

本文告诉大家如何使用 win32 方法创建一个全屏的窗口

WPF 在 XAML 写 C# 代码

本文告诉大家如何扔掉 cs 文件,在 xaml 写 C# 代码,将 xaml 和 C# 代码写在一个文件

WPF 从零手动创建承载 Xamarin Forms 项目

现在完全开源的 Xamarin Forms 是支持使用 WPF 进行承载,也就是使用 Xamarin 开发的控件等是可以在 WPF 项目使用的。本文来告诉大家如何在 WPF 中运行 Xamarin Forms 项目,让 Xamarin Forms 构建为 WPF 应用

Roslyn 读取 PackageReference 的版本号和内容

在写 msbuild 的预编译逻辑,如果想要拿到项目安装的 NuGet 库和版本,可以通过获取 PackageReference 的方法获取

asp dotnet core 提供大文件下载的测试

本文仅仅是提供测试使用的代码

WPF 让 TextBox 支持水平滚动

超级简单的方法,只需要设置 HorizontalScrollBarVisibility 可见就可以了

WPF 使用 Direct Manipulation 的方法

小伙伴是否了解在 UWP 和 WPF 触摸的滑动的顺滑是不相同的,一个原因是 UWP 使用了 Direct Manipulation 这个科技。这个科技需要采用 Pointer 消息的支持,本文告诉大家如何使用

C# dotnet 使用判断文件夹存在的方法判断一个文件路径会怎样

假定我有一个文件的路径,我将这个文件路径放在文件夹判断方法里面,请问此时返回的是存在还是不存在?答案是返回不存在

C# dotnet 使用 startIndex 提升 IndexOf 的性能

在代码审查 WPF 仓库的时候,小伙伴告诉我说使用 dotnet core 版本的 WPF 开了 ReadyToRun 的提升还不够大,他准备开始一大波业务无关的优化,其中就包含了 xaml 中的字符串相关优化。我在 davidwrighton 大大的优化代码和 pentp 大大的代码审查里面学到了使用 startIndex 提升 IndexOf 的性能,本文就来和大家分享一下

WPF SharpDx 性能优化方法

本文记录一些通用的 SharpDx 的性能优化方法

WPF 列表右键菜单比较符合 MVVM 的命令绑定方法

群里小伙伴问我如何在 ListView 的右击的时候知道右击的是哪一项,他想要获取对应的行信息。他使用的是 GridView 做的,于是我告诉他需要自己写 ItemContainerStyle 在 GridViewRowPresenter 里添加右键的逻辑。但是这样写不清真,我问到了他的本质问题其实只是想要做右键菜单。刚好我在写一个测试应用,用于测试我的文件下载库,此时需要用到在右击某一个下载项的时候,拿到当前下载项的信息,给出右键菜单。我不使用小伙伴的逻辑,就按照我自己会采用的写法,我认为这样写比较符合 WPF 框架的设计,下面让我告诉大家我的用法,十分简单

Roslyn 打包 NuGet 包添加改动日志

默认的 NuGet 包支持在 releaseNotes 中添加更改日志,用户可以通过更改日志了解各个版本更新的内容。在 SDK Style 格式的 csproj 文件,可以读取本地的文本文件的内容作为 NuGet 包的改动日志

Roslyn 在 NuGet 包中放注释 xml 文件的方法

本文告诉大家如何在打出的 NuGet 包含代码的注释,这样安装了 NuGet 的小伙伴就可以在 VS 上看到对应的方法和类的注释

dotnet OpenXML 解压缩文档为文件夹工具

做 Office 解析,是需要进行不断的测试才能了解 OpenXML 里面的属性的作用。根据 Ecma 376 的定义,文档其实只是一个压缩文件,可以使用压缩工具进行解压缩。但是我需要不断进行修改文档里面的属性,然后用 Office 打开,测试属性的效果,此时就需要有一个工具用来提升效率

dotnet OpenXML 文本 EndParagraphRunProperties 的作用

其实我想要记录的仅仅只是 a:endParaRPr 对文本布局的作用

dotnet OpenXML 文本 Text Line Break 的作用

本文主要和小伙伴聊 a:br 这个标记的作用

dotnet OpenXML 从文档生成创建文档的代码的库

本文和大家介绍 Serialize.OpenXml.CodeGen 这个支持从某个文档生成用于创建出这个文档的 C# 或 VB 代码的库。作用就是可以让小伙伴在拿到一份模版文件之后,可以通过 Serialize.OpenXml.CodeGen 生成能创建出这份文档的 C# 或 VB 的代码,用于在这份代码上面更改功能,做到创建定制 Docx 或 PPTX 或 Xlsx 文档的功能

WPF 绑定继承的样式提示 只能根据带有基类型 IFrameworkInputElement 的目标类型的 Style 样式

在 WPF 中,如果有一个样式是继承另一个样式,而样式没有使用 TargetType 那么在运行的时候会提示 只能根据带有基类型 IFrameworkInputElement 的目标类型的 Style 样式

C# 8.0 文件长度 Bytes 字节转 KB 等单位字符串

本文将使用 C# 8.0 写一个相对比较省内存和性能不差的将文件长度从 Bytes 转换为单位使用 KB 或 MB 或 GB 等单位的字符串的方法

dotnet OpenXML 的 spcPct 和 spcPts 表示距离的不同

在 OpenXML 里面的文本排版里面使用到 spcPct (Spacing Percent) 和 spcPts(Spacing Points)两个不同的单位用来表示段前空白和段后空白以及行间距

dotnet OpenXML 文本字体的选择规则

在 Office 的文本排版里面,会根据字符选择使用哪个字体插槽。也就是实际上在 Office 里面可以在一个文本段里面指定多个字体,会根据实际的字符使用不同的字体