lindexi

林德熙 - Windows 10 App Developer

林德熙

WPF 的 DefaultEventAttribute 有什么作用

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

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

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

dotnet 读 WPF 源代码 Popup 的 StaysOpen 为 false 将会吃掉其他窗口的首次激活

在 WPF 中,使用 Popup 控件,可以设置 StaysOpen 属性来控制是否在 Popup 失去焦点时,也就是点击界面空白处,自动收起 Popup 控件。但如果有两个窗口,在设置 Popup 控件的 StaysOpen 属性为 false 那么将会吃掉在点击其他窗口的第一次交互,如鼠标点击或触摸点击时将不会让本进程的其他窗口 Activate 激活

dotnet OpenXML 预设 PresetColorValues 颜色对应的值

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

考古 dotnet 的不同版本

本文来考古一下 dotnet 发布过的版本,相信本文里面有很多个版本都是大家很少听过的

WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待

本文是记录一个线程相互等待导致主线程无法响应的问题,这个问题是属于一定可以复现的问题,是 WPF 的已知问题。如果遇到这个问题,属于暂时没有方法解决,只能规避。 这个问题的最简单复现步骤是在触摸线程,也就是 StylusInput 线程,等待一个主线程的窗口关闭,此时就会出现主线程卡住的问题

苏州 开源自主的 dotnet 生态

本文仅仅只是用来在2020苏州开发者大会上的素材,开发者大会成功完成,本文也可以公开

VisualStudio 好用插件集合

我找到了很多好用的 VisualStudio 插件,通过插件可以提高开发效率

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

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

Unity3D OpenVR SteamVR 在头盔视觉前面常驻文本

我期望在玩家视觉前方常驻一点文本,用于做有趣的交互,实现方法很简单

Unity3D OpenVR SteamVR 点击菜单切换场景

本文来告诉大家如何在基于 SteamVR 的 Unity3D 里面在用户点击菜单的时候,切换到新的场景的方法

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

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

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

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

dotnet 读 WPF 源代码笔记 插入触摸设备的初始化获取设备信息

在 WPF 触摸应用中,插入触摸设备,即可在应用里面使用上插入的触摸设备。在 WPF 使用触摸设备的触摸时,需要获取到触摸设备的信息,才能实现触摸

WPF 用到的触摸的 COM 接口

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

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

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

dotnet C# 实现 GetHashCode 的方法

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

dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用

本文来安利大家一个有趣而且强大的库,通过 F# 和 C# 混合编程编写 WPF 应用,可以在 WPF 中使用到 F# 强大的数据处理能力

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法

在开发 OpenVR 游戏或应用时,由于 VR 设备的交互形式和传统的形式不相同,因此获取输入交互设备数据如按键等的方式也有所不同。在 Steam VR SDK 里面给出了推荐的做法是只定义交互名称,而不获取具体的硬件设备信息,也就是说咱在应用或游戏里面采用的交互都是抽象的交互,至于这个抽象的交互是采用哪个硬件产生的,就交给跟上一层进行定义,于是就能很好的将编写代码的获取输入和各个不同类型的 VR 控制器隔离开来,避免 VR 应用绑死某个控制器上,也能很好的支持未来的交互设备

Unity3D OpenVR SteamVR Input Action 动作

本文来告诉大家在 Unity3D 中的 SteamVR Input 里面的 Action 动作行为

Unity3D OpenVR 虚拟现实 保龄球打砖块游戏开发

据说水哥买了 Valve Index 设备,既然这个设备这么贵,不开发点有(zhi)趣(zhang)游戏就感觉对不起这个设备。本文将来开始着手开发一个可玩性不大,观赏性极强的保龄球打砖块游戏。这仅仅只是一个入门级的游戏,代码量和制作步骤都超级少,适合入门

Unity3d 入门 控制相机移动

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

我写的逗比代码

本文记录我写的代码逗比代码

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

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

通过 COM 读取 Office PPT 文件提示 COMException 错误码 0x80004005 可能原因

使用 COM 的方式可以调用本机的 Office 组件进行 PPT 以及 Word 和 Excel 等文件的读写,在打开文件的时候,如果提示 System.Runtime.InteropServices.COMException (0x80004005) 就意味着这是一个通用的错误,没有具体的原因

WPF 给类库设置设计时使用的资源字典

在开发 WPF 类库时,由于类库里面没有存在 App.xaml.cs 文件,而在对单个 XAML 进行开发时,设计器将会因为找不到资源文件的存在,而拿不到资源。本文告诉大家简单的方法,给设计器设置仅在设计时引用的资源

win10 uwp 使用 XamlTreeDump 获取 XAML 树元素内容

本文来安利大家 XamlTreeDump 库,通过这个库可以将 XAML 树上的元素转换为 json 字符串,可以用来进行 UI 单元测试

dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退

本文来告诉大家 WPF 已知问题,在用户的设备上,如果不存在 Arial 字体,同时安装了一些诡异的字体,那么也许就会让应用在使用到诡异的字体的时候,软件闪退

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

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

dotnet 运行时获取某类型的对象占用内存大小

本文将告诉大家一个黑科技方法在运行时动态获取对象本身占用空间,不包括对象引用的其他对象的空间大小的方法

dotnet 部署 github 的 Action 进行持续集成

被微软收购的 GitHub 现在十分土豪,提供了免费的服务器给咱构建。刚好微软对 dotnet 的支持是特别好的,毕竟还算半个自家的东西,大概只需要 3 分钟就可以在 github 上通过 Action 部署持续集成,本文以 SourceYard 作为例子告诉大家如何配置

dotnet 配合 GitHub 的 Action 做自动推 Tag 时打包 NuGet 包

被微软收购的 GitHub 越来越好用,拥有大量免费的工具资源和构建服务器资源,再加上私有项目的无限制使用,我有大量的项目都在向 GitHub 迁移。通过 GitHub 的 Action 的自动构建,可以用上微软土豪的服务器资源,进行自动化测试和构建。对于 CBB 来说,发布就是打出 NuGet 包然后上传到内部 NuGet 服务器。此时遇到的问题是,如何在 GitHub 上执行打包,打包的时候如何指定 NuGet 包的版本号。因为 CBB 的特殊性,我要求每个 NuGet 正式发布的包都应该有一个对应的 Tag 号,这样将 NuGet 库安装到项目里面,之后发现问题了还能找到对应版本的代码

Roslyn 禁止 sdk style csproj 默认引用 Compile 代码文件

默认在 SDK Style 的 csproj 文件将会引用所有的 .cs 文件到 Compile 项,如果是 WPF 项目还会添加 xaml 的引用。如果想要自己手动设置,让一些项不默认引用,需要添加属性 EnableDefaultCompileItems 告诉 msbuild 不要默认引用

C# 获取 PC 序列号

在 C++ 需要使用 GetSystemFirmwareTable 的方法来获得 PC 的序列号,需要写的代码很多,但是在 C# 可以使用 WMI 来拿到序列号

dotnet 5 破坏性改动 WPF 和 WinForms 的 OutputType 输出类型重定向为 WinExe 类型

官方团队为了防逗比,默认将 OutputType 输出类型重定向为 WinExe 类型,这样能解决很多新手遇到的 WPF 项目显示出黑框控制台界面问题。而对于一些老司机来说,这个特点反而有点迷,特别是在尝试打开控制台调试的时候