lindexi

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

林德熙

WPF 下拉框选项做鼠标 Hover 预览效果

本文来告诉大家如何在 WPF 中,在 下拉框 ComboBox 里面,鼠标移动到 ComboBoxItem 上时,自动触发对应的事件,用来预览此选项值。例如我在实现一个颜色下拉框,此时我可以通过点击下拉框显示多个不同的颜色,鼠标移动到某个颜色选项上,可以修改界面,预览此颜色的内容

dotnet C# 获取一个可用的端口的方法

本文来告诉大家如何可以获取一个可用的端口

asp dotnet core 限制接口只能本机访问的方法

本文告诉大家,如果限制某些 API 接口,只能让本机进行访问,如只能通过 127.0.0.1 调用某个接口的 get 或 post 方法

dotnet C# 如果在构造函数抛出异常 析构函数是否会执行

假设在某个类型的构造函数里面抛出了异常,那么这个对象的析构函数是否会执行

dotnet C# 如果在构造函数抛出异常 是否可以拿到对象赋值的变量

如果使用某个变量去获取某个类型的对象创建,但是在这个类型的构造函数调用时抛出异常,请问此变量是否可以拿到对应的对象

dotnet C# 在 finally 抛异常会发生什么

如果我在一个方法的 finally 里面抛出异常,而在 try 里面也抛出,那在上层拿到的是什么

dotnet C# 只创建对象不调用构造函数方法

有时我期望只是创建出对象,但是不要调用对象的构造方法,可以通过使用 FormatterServices 的 GetUninitializedObject 函数来实现只创建对象不调用构造函数方法

WPF 后台代码做 TranslateTransform 的动画

本文告诉大家,在后台代码,对 TranslateTransform 做动画的方法

VisualStudio 在 DebuggerDisplay 的属性更改业务逻辑将会让调试和非调试下逻辑不同

本文记录我写的逗比代码,我在 DebuggerDisplay 对应的属性的 get 方法上,在这个方法里面修改了业务逻辑,如修改界面元素,此时我在 VisualStudio 断点调试下和非断点调试下的行为不相同

NewLife 的 RocketMQ 的生产者每次都是新实例将只由一个消费者消费

我写了一点逗比代码,让在每次使用 NewLife 的 RocketMQ 发送消息时,都创建一个新的 Producer 生产者。此时我发现了在我的消费者里面,无论开多少个消费者实例进程,每次都只有一个消费者进行消费

WPF 某个界面或控件在界面找不到看不到可能的原因

本文来告诉大家在 WPF 开发中,发现有某个按钮或某个控件,某个预期的界面,没有在窗口或者没有在界面里面看到或者找到可能的原因和调试的方法

VisualStudio can not get the correct struct object value in Locals windows

VisualStudio 的局部变量窗口里面看到某些结构体的值和实际上的结构体调用 ToString 方法返回的值是不同的 When I use the unsafe struct with the special size and I override the ToString method, then I can find the actual ToString value and the value in VisualStudio Locals windows are different

WPF 框架开发 调试和开发 XAML 构建过程的 PresentationBuildTasks 方法

阅读本文,你可以了解如何编写开发和调试 XAML 构建为 Baml 和 g.cs 文件的过程和工具。本文也适合想要了解 WPF 的 XAML 构建过程的开发者阅读,本文提供了可以断点调试 WPF 的 XAML 构建过程的方法和代码

WPF 的 DefaultEventAttribute 有什么作用

在自定义 WPF 控件库时,可以看到有一些控件会加上 DefaultEventAttribute 特性,通过这个特性可以告诉 XAML 编辑器,默认创建的事件是什么

WPF 在窗口的 Deactivated 使用 Mouse 的 Capture 将会让进程失去交互

如果在某个窗口的 Deactivated 事件里面,使用 Mouse.Capture 方法,让这个窗口重新捕获鼠标,那么将会让进程的所有窗口都失去鼠标交互,点击无效,只有在切换到其他进程的窗口之后,才能让窗口继续交互

dotnet OpenXML 预设 PresetColorValues 颜色对应的值

本文来告诉大家 ECMA 376 文档的 20.1.10.47 章的 ST_PresetColorVal 预设颜色值对应的颜色

dotnet OpenXML SDK 形状几何 Geometry 的计算公式含义

本文来告诉大家,在 OpenXML 里面的 Geometry 的如 gdLst 和 ahLst 和 pathLst 等里面参数的公式的参数含义

Win32 使用 SetCurrentProcessExplicitAppUserModelID 关联多个进程 在任务栏合并 WPF 多进程窗口

我有一个 WPF 应用,这是一个绿色软件,会被用户拷贝这和那的文件夹,我期望在多个文件夹里面打开的进程,在任务栏里面都可以将窗口进行合并。使用 Win32 的 Shell32.dll 提供的 SetCurrentProcessExplicitAppUserModelID 可以显设置应用的 Application User Model ID 从而让在多个不同的路径打开的应用,使用相同的 Id 而在任务栏进行合并窗口

Autofac 集成测试 在 ConfigureContainer 之后进行 Mock 注入

在使用 Autofac 框架进行开发后,编写集成测试时,需要用 Mock 的用于测试的模拟的类型去代替容器里面已注入的实际类型,也就需要在 Autofac 完全收集完成之后,再次注入模拟的对象进行覆盖原有业务代码注册的正式对象。但 Autofac 默认没有提供此机制,我阅读了 Autofac 的源代码之后,创建了一些辅助代码,实现了此功能。本文将告诉大家如何在集成测试里面,在使用了 Autofac 的项目里面,在所有收集完成之后,注入用于测试的 Mock 类型,和 Autofac 接入的原理

dotnet OpenXML 读取形状轮廓线条样式序号超过主题样式列表数

在 OpenXML 中,默认的形状可以通过指定 LineReference 让形状使用文档主题里面的样式。文档主题里面包含多个样式,在形状里面指定样式通过的是序号的方法,如果在形状里面指定的序号超过了主题的数量,那么将会使用最后一项样式

WPF 用到的触摸的 COM 接口

本文记录 WPF 用到的触摸的 COM 接口

WPF 列表控件数据源绑定多个数据集合方法

在 WPF 用的多的列表控件如 ListBox 或 ListView 等,本文告诉大家在这些列表控件上进行绑定多个数据集合来源的多个实现方法。如有一个显示动物列表的控件,需要绑定的数据来源是阿猫和阿狗两个 ObservableCollection 列表,不在后台代码编写合并集合的代码情况下,可以通过 XAML 的编写,绑定多个数据集合

dotnet C# 实现 GetHashCode 的方法

本文来聊聊在重写某个类的 GetHashCode 方法时,可以如何实现 GetHashCode 的返回值

WPF 已知问题 BitmapDecoder.Create 不支持传入 Asynchronous 的文件流

这是在 GitHub 上有小伙伴报的问题,在 WPF 中,不支持在调用 BitmapDecoder.Create 方法时,传入的 FileStream 是配置了 FileOptions.Asynchronous 选项的文件流。本质原因是 WIC 层不支持,和 WPF 没有关系。此问题我已修复,在 dotnet 7 或更高版本将不存在此问题

Unity3d 入门 控制相机移动

本文将告诉大家如何在 Unity3D 中通过键盘或鼠标进行控制 Unity3D 的相机移动。在 Unity3D 中的相机相当于人的视角,通过移动相机可以用来修改咱界面看到的画面

WPF 适合入门阅读的开源项目 SeeGit 图形化 Git 历史记录

本文来安利大家一个不错的开源项目,这个开源项目整体写的不错,也有用到 MVVM 框架,项目组织以及命名等都还行,功能也实现完全,适合入门级阅读

Autofac 通过 PreserveExistingDefaults 解决单元测试 Fake 对象被覆盖

在使用 Autofac 作为 IoC 容器,因为 Autofac 默认的创建时机是在主机运行时。而在此 Module 被 Load 时注入的对象的注入的时机,将会在单元测试 Fake 注入之后,这就意味着 Load 时注入的对象将会覆盖 Fake 的对象。可以通过调用 Autofac 的 PreserveExistingDefaults 方法解决覆盖的问题

dotnet Roslyn 通过读取 suo 文件获取解决方案的启动项目

本文来告诉大家一个黑科技,通过 .suo 文件读取 VisualStudio 的启动项目。在 sln 项目里面,都会生成对应的 suo 文件,这个文件是 OLE 格式的文件,文件的格式没有公开,本文的方法适合用在 VisualStudio 2019 上,对于其他版本的 VisualStudio 也许会不适合

WPF 使用 Behavior 库辅助获取动态资源变更事件

在 WPF 开发中,可以使用 Behavior 库辅助,监听某个动态资源变更的事件,从而了解到是在哪个模块变更了动态资源,或者根据动态资源的变更而进行界面修改

Windows 下的 WPF 开发 调试应用程序在什么时机加载了 Dll 模块

在尝试优化性能的时候,如何可以了解到在应用程序启动的过程中,在什么步骤开始加载了某些 Dll 文件

VisualStudio 外部工具配合 dotnet tool 制作复制文件名工具

我在 VisualStudio 中,为了方便沟通,我需要复制当前文件的文件名,不包含本地的路径,但是我没有找到一个好的复制方式,每次都是复制完全的路径,然后再删除部分的功能。为了提高效率,于是我就自己使用 .NET Core 制作了一个 dotnet 工具,让 VisualStudio 的自定义外部工具配合 dotnet tool 加上传入参数实现通过按下快捷键即可复制当前标签页对应的文件名。实现在 VisualStudio 中按下某个快捷键即可复制当前打开的文件的文件名到剪贴板的功能

VisualStudio 2019 调试项目使用 Portable PDB 提示不支持 PDB 格式

在新的 .NET 上,将会默认使用 Portable PDB 符号格式,而如果 VisualStudio 配置了使用托管兼容模式,那么将在加载符号的时候,将会提示不支持 PDB 格式

WPF 通过 Switch.MS.Internal.EnableWeakEventMemoryImprovements 开关开启弱事件内存优化

默认的 WPF 为了保持行为兼容,没有开启弱事件的内存优化。可以在 WPF 中指定 Switch.MS.Internal.EnableWeakEventMemoryImprovements 和 Switch.MS.Internal.EnableCleanupSchedulingImprovements 开关来让 WPF 运行在 .NET Framework 4.8 或 .NET Core 3.0 以上版本时,自动开启弱事件内存优化。通过这个开关,将会更改部分行为,但是基本上不会有影响,因为影响的都是内存啥时候回收。这些开关和 WPF 应用所使用的开发版本无关,只和 WPF 应用所运行在的设备环境有关,如果在运行的设备上安装了 .NET Framework 4.8 版本,那么自动将会应用上,否则这个开关就和没有写一样

WPF 触摸失效 试试重启触摸

在使用一些诡异的系统以及诡异的触摸框的时候,也许会出现 WPF 程序触摸失效,失效的本质原因是 Win32 层应用触摸失效。也许出现的问题是某个窗口设置 TopMost 然后插拔一些触摸设备等,这些行为,如果触摸设备太过诡异,也许就会让 Win32 窗口触摸失效。刚好 WPF 也是一个 Win32 窗口,此时的 WPF 也会触摸失效

WPF 实现自定义的笔迹橡皮擦

本文来告诉大家使用比较底层的方法来实现 WPF 的笔迹橡皮擦