
WPF源代码
文章平均质量分 89
我在读 WPF 源代码做的笔记
lindexi_gd
我是微软Windows应用开发方向的最具价值专家,欢迎访问我博客blog.lindexi.com里面有大量WPF和UWP博客
展开
-
dotnet 读 WPF 源代码笔记 渲染收集是如何触发
在 WPF 里面,渲染可以从架构上划分为两层。上层是 WPF 框架的 OnRender 之类的函数,作用是收集应用程序渲染的命令。上层将收集到的应用程序绘制渲染的命令传给下层,下层是 WPF 的 GFX 层,作用是根据收到的渲染的命令绘制出界面。本文所聊的是渲染上层部分,在 WPF 框架是如何做到界面刷新渲染,包括此调用的顺序以及框架逻辑阅读本文之前,我期望读者有一定的 WPF 渲染基础...原创 2021-09-13 00:38:00 · 1788 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型
本文来聊聊 WPF 那些值得称赞的设计中的 NamedObject 类型。在 WPF 中,有很多值得我学习的设计开发思想,其中就包括本文将要介绍的 NamedObject 类型。此类型的定义仅仅只是为了方便调试,而没有具体的业务功能原创 2021-08-04 00:52:25 · 446 阅读 · 0 评论 -
WPF 框架开发 ColumnDefinition 和 RowDefinition 的代码在哪
我的 VisualStudio 在更新到 2022 就构建不通过 WPF 仓库,提示我在 Grid 的代码里面找不到 ColumnDefinitionCollection 和 RowDefinitionCollection 等的定义,在我开始找 WPF 仓库关于这几个类型的定义时,居然找不到对应的源代码。本文来告诉大家在 WPF 仓库里面是如何存放几个类型原创 2021-08-10 01:03:35 · 1192 阅读 · 0 评论 -
WPF 框架开发 调试和开发 System.Xaml 的独立项目方法
本文将给大家一个 System.Xaml 的独立项目,此项目代码和 WPF 仓库的 System.Xaml 项目相同,但本文的 System.Xaml 的独立项目不依赖 WPF 其他项目,构建方便,构建速度快,搭配 System.Xaml.Demo 项目更方便调试本文是对新入手开发 WPF 框架的开发者友好的,只要对 WPF 有一些了解即可入手。本文的 WPF 框架开发,指的是开发 WPF...原创 2021-07-03 01:53:04 · 547 阅读 · 0 评论 -
WPF 框架开发 调试和开发 XAML 构建过程的 PresentationBuildTasks 方法
阅读本文,你可以了解如何编写开发和调试 XAML 构建为 Baml 和 g.cs 文件的过程和工具。本文也适合想要了解 WPF 的 XAML 构建过程的开发者阅读,本文提供了可以断点调试 WPF 的 XAML 构建过程的方法和代码本文非新手友好,有大量构建和预编译知识,请在阅读本文之前自行了解这部分知识。更多请看 手把手教你写 Roslyn 修改编译在 WPF 中,构建 XAML 用的是...原创 2021-06-10 11:17:00 · 706 阅读 · 2 评论 -
dotnet 读 WPF 源代码 聊聊 DispatcherTimer 的实现
本文来告诉大家在 WPF 框架里面,是如何实现 DispatcherTimer 的功能。有小伙伴告诉我,读源代码系列的博客看不动,原因是太底层了。我尝试换一个方式切入逻辑,通过提问题和解决问题的方法,一步步告诉大家 WPF 是如何实现 DispatcherTimer 的功能假定咱是 WPF 框架的开发者(虽然我就是,尽管是格式化代码工程师)咱需要实现一个 DispatcherTimer 的...原创 2021-06-09 00:49:35 · 546 阅读 · 0 评论 -
WPF 如何知道当前有多少个 DispatcherTimer 在运行
在 WPF 调试中,对于 DispatcherTimer 定时器的执行,没有直观的调试方法。本文来告诉大家如何在 WPF 中调试当前主线程有多少个 DispatcherTimer 在运行在 WPF 中,如果有 DispatcherTimer 定时器在执行,将会影响到主线程的执行,将会让主线程诡异忙碌。或者有 DispatcherTimer 定时器忘记订阅 Tick 同时也忘记设置时间,将会...原创 2021-06-08 11:45:45 · 493 阅读 · 0 评论 -
dotnet 读 WPF 源代码 Popup 的 StaysOpen 为 false 将会吃掉其他窗口的首次激活
在 WPF 中,使用 Popup 控件,可以设置 StaysOpen 属性来控制是否在 Popup 失去焦点时,也就是点击界面空白处,自动收起 Popup 控件。但如果有两个窗口,在设置 Popup 控件的 StaysOpen 属性为 false 那么将会吃掉在点击其他窗口的第一次交互,如鼠标点击或触摸点击时将不会让本进程的其他窗口 Activate 激活在 WPF 中,通过 Popup ...原创 2021-06-07 00:55:59 · 1516 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 插入触摸设备的初始化获取设备信息
在 WPF 触摸应用中,插入触摸设备,即可在应用里面使用上插入的触摸设备。在 WPF 使用触摸设备的触摸时,需要获取到触摸设备的信息,才能实现触摸获取触摸设备插入在 WPF 中,通过 Windows 消息获取触摸设备插入事件,在 src\Microsoft.DotNet.Wpf\src\PresentationCore\System\Windows\Input\Stylus\Wisp\W...原创 2021-05-24 12:15:06 · 516 阅读 · 0 评论 -
WPF 用到的触摸的 COM 接口
本文记录 WPF 用到的触摸的 COM 接口消息用到了 WM_TABLET_ADDED 和 WM_TABLET_DELETED 消息使用的代码是 src\Microsoft.DotNet.Wpf\src\PresentationCore\System\Windows\Input\Stylus\Wisp\WispLogic.cs 的 HandleMessage 方法 int...原创 2021-05-23 00:49:44 · 488 阅读 · 0 评论 -
WPF 已知问题 BitmapDecoder.Create 不支持传入 Asynchronous 的文件流
这是在 GitHub 上有小伙伴报的问题,在 WPF 中,不支持调用 BitmapDecoder.Create 方法,传入的 FileStream 是配置了 FileOptions.Asynchronous 选项的文件流。本质原因是 WIC 层不支持,和 WPF 没有关系GitHub 链接: BitmapDecoder.Create does not handle FileStream w...原创 2021-05-15 01:12:38 · 462 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退...
本文来告诉大家 WPF 已知问题,在用户的设备上,如果不存在 Arial 字体,同时安装了一些诡异的字体,那么也许就会让应用在使用到诡异的字体的时候,软件闪退在 WPF 的 FontFamily.cs 字体类里面,有一个叫 FirstFontFamily 的属性,这个属性的逻辑代码里面将包括在当前字体太过诡异时,自动 Fallback 到默认的字体,而默认的字体就是 Arial 字体。这...原创 2021-05-08 00:43:32 · 481 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 WriteableBitmap 的渲染和更新是如何实现
在 WPF 框架提供方便进行像素读写的 WriteableBitmap 类,本文来告诉大家在咱写下像素到 WriteableBitmap 渲染,底层的逻辑之前我使用 WriteableBitmap 进行 CPU 高性能绘图时,在性能调试遇到一个问题,写入到 WriteableBitmap 的像素会经过两次拷贝。其中一次是我自己拷贝到 WriteableBitmap 而另一次拷贝就在 Wri...原创 2021-04-20 01:15:53 · 801 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 后台线程创建 WriteableBitmap 锁住主线程
在 WPF 中,如果在没有开启 Dispatcher 的后台线程里面创建 WriteableBitmap 对象,在 WriteableBitmap 构造函数传入在主线程创建的 BitmapSource 也许就会锁住主线程。本文将通过 WPF 框架源代码告诉大家为什么会锁住主线程这是在 WPF 开源仓库上一个小伙伴报的,详细请看 WriteableBitmap hangs when sourc...原创 2021-04-17 00:33:00 · 634 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 创建 SolidColorBrush 性能没有想象那么差
在 WPF 中,常用的画刷里面有纯色画刷 SolidColorBrush 类。因为画刷会对应到 DirectX 的资源,因此之前我以为纯色画刷其实会比 Color 会占用更多的资源。在 WPF 中 Color 其实是结构体,创建速度快。而 SolidColorBrush 是画刷,会对应 DirectX 资源,相对来说性能会比较差。但在通过阅读 WPF 的源代码,发现其实 SolidColorBru...原创 2021-04-14 01:13:17 · 851 阅读 · 0 评论 -
dotnet 桌面端基于 AppHost 的配置式自动切换更新后的应用程序路径
在桌面应用端开发的时候,应用更新有很多实现方式,本文来告诉大家一个基于 dotnet core 或 .NET 5 的 AppHost 方式的配置式软件更新方法。这个方法的特点是入口的 Exe 文件可以固定不动,每次更新的时候只需要更新某个配置文件的路径,即可实现在应用启动的时候,读取配置文件的路径加载某个版本的软件跑起来。而且本文的方法不需要额外其他一个独立的启动进程,而是入口文件进程就是最终的 ...原创 2021-04-06 03:40:08 · 534 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 默认的 Main 函数是在哪创建的
在使用默认的 WPF 项目开发的时候,咱是不需要自己编写 Main 函数的,在 WPF 中的 Main 函数是存放在 App.g.cs 里面,看起来这个 Main 函数是生成的函数,本文将介绍在 WPF 框架中是如何创建这个入口函数阅读本文你将了解 WPF 框架中,默认在 App.g.cs 生成入口 Main 函数的详细过程。阅读本文之前,你需要了解一些编译过程的知识以及代码生成的知识默...原创 2021-03-30 00:32:36 · 546 阅读 · 0 评论 -
WPF 源代码 资源字典 ResourceDictionary 设置 Source 属性的逻辑
本文来和大家聊聊在 WPF 里面在给 ResourceDictionary 设置 Source 属性时,在 WPF 框架里面做了哪些逻辑默认添加 Source 时都是指定 WPF 自身的 XAML 资源字典,用途就是指定 XAML 字典作为此控件的资源字典而默认的 XAML 资源字典使用 Page 形式进行构建,构建之后作为二进制的 Baml 文件被打入程序集中作为程序集资源,在 dot...原创 2020-11-27 00:36:04 · 1966 阅读 · 0 评论 -
WPF 从最底层源代码了解 AllowsTransparency 性能差的原因
当前的 WPF 的源代码完全开放,本文将从最底层的 WPF 代码告诉大家为什么设置了 AllowsTransparency 之后性能会变差,以及 WPF 透明的原理特别感谢 少珺 的研究,我只是将他告诉我的内容写出来,告诉大家本文将会告诉大家 AllowsTransparency 设置为 true 之后,为什么整体渲染性能降低,将会占用更多 CPU 资源。以及在 4k 下使用更多内存的...原创 2020-11-02 03:14:06 · 1662 阅读 · 0 评论 -
手把手教你如何构建 WPF 官方开源框架源代码
从去年微软就将 WPF 开源了,差不多现在所有 WPF 的源代码都开源了。在学习框架的时候,我会做一些改动,期望能构建一个自己的版本进行测试。但是作为一个特别大的框架,想要构建跑起来可不是直接在 VisualStudio 里面点击一下运行就完成了,需要做很多的准备才可以。本文将一步步教你如何构建 WPF 框架源代码我不敢说每个版本的 WPF 框架的源代码我都能构建,在官方仓库 https:...原创 2020-04-25 06:30:40 · 1035 阅读 · 0 评论 -
2019-5-24-WPF-源代码-从零开始写一个-UI-框架
title author date CreateTime categories WPF 源代码 从零开始写一个 UI 框架 lindexi 2019-05-24 15:54:36 +0800 2018-11-18 20:54:22 +0800 WPF 需要知道 WPF 是一个 U...原创 2019-11-21 16:04:57 · 717 阅读 · 0 评论 -
dotnet Framework 源代码 类库的意思
本文告诉大家 dotnet framework 的源代码类库的意思下面列出来 dotnet framework 源代码的各个类库的作用。SystemSystem 命名空间包含基本类和基类,这些类定义常用的值和引用数据类型、事件和事件处理程序、接口、属性和异常处理。System.ActivitiesSystem.Activities 命名空间包含在 Window Workflow ...原创 2019-09-16 15:12:41 · 449 阅读 · 0 评论 -
dotnet Framework 源代码 · Ink
本文是分析 .NET Framework 源代码的系列,主要告诉大家微软做笔迹用的思路,怎么做的笔迹才是高性能的,用户体验比较好的。我会告诉大家源代码的思想,当然这个文章会比较无聊。如果你是想做笔迹的,即使不是 WPF 开发,不是 C# 开发的,也可以看看,因为这个思想是微软的,相对还是比较好的原创 2019-09-29 08:44:35 · 509 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 为什么设置了SplashScreen会让Application.Current.Activated事件不触发
在 WPF 应用中,可以非常方便将一张图片设置为 SplashScreen 启动界面欢迎图,但是如果有设置了启动界面欢迎界面,那么 Application.Current.Activated 事件就不会被触发。本文通过 WPF 框架开源的代码告诉大家这个原因这是在 GitHub 上,一个小伙伴问的问题,详细请看 After adding a splashscreen Applicatio...原创 2021-03-25 02:04:15 · 504 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 为什么默认的笔迹触摸点的压感是 0.5 的值
本文是我在读 WPF 源代码做的笔记原创 2021-01-29 19:33:17 · 457 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 Stroke 类可能存在的内存泄露
在 WPF 中,使用 Stroke 类时,可能会出现内存泄露,原因是 DrawingAttributes 的事件被监听没有释放。本文将从源代码的角度告诉大家这个内存泄露问题和如何解决原创 2021-01-29 19:32:27 · 625 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 XAML 创建对象的方法
在 WPF 中,在 XAML 里面定义的对象的创建,实际上不是完全通过反射来进行创建的,在WPF框架里面,有进行了一系列的优化原创 2021-01-29 19:25:03 · 599 阅读 · 0 评论 -
WPF 框架开发 WPF 的构建在哪使用到 Perl 工具
在构建 WPF 开源仓库的时候,需要先搭建 Perl 环境,此时大家是否想了解在 WPF 构建的哪里用到 Perl 工具在完全开源的 WPF 仓库里面,其实可以看到很多 Perl 的影子,大部分都是用来做构建的脚本,小部分是在做我也看不懂的逻辑做构建脚本的包括了生成一些代码,如 GenerateAvTraceMessages 这个构建步骤,代码定义如下<Project>...原创 2021-01-13 00:33:30 · 388 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 使用 Win32 方法修改窗口的坐标和大小对窗口依赖属性的影响...
咱可以使用 Win32 的 SetWindowPos 修改窗口的坐标和大小,此时 WPF 的窗口的 Left 和 Top 和 Width 和 Height 依赖属性也会受到影响,本文将会告诉大家在啥时候会同步更改 WPF 依赖属性的值,而什么时候不会本文将会用到很多 Win32 方法,在 dotnet 基金会开源了对 win32 等的调用的封装库,请看 https://github.com...原创 2021-01-07 00:26:30 · 534 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 SafeMILHandleMemoryPressure 的作用
本文来告诉大家在 WPF 里面的 SafeMILHandleMemoryPressure 类的作用。这是一个 internal 不开放的类,是在 WPF 中和 Dx 等模块调用使用的,用途就是辅助 GC 统计当前内存情况,用来在内存不够的时候触发回收这个类放在 src\Microsoft.DotNet.Wpf\src\PresentationCore\System\Windows\Media...原创 2020-12-26 04:48:46 · 443 阅读 · 0 评论 -
WPF 最简方法使用自己定制的 WPF 框架
本文提供了一个最简的方法,可以用到整个 WPF 框架里面所有 internal 内部权限的成员的方法。这是一个我自己定制的 WPF 框架,可以在此基础上构建属于自己的定制化的 WPF 框架本文提供的方法适用于 .NET 5 和 x86 下,如果需要其他版本,请自行构建和使用,关于如何自行构建和定制化,请看 手把手教你构建 WPF 框架的私有版本现在的 WPF 属于 dotnet 基金会组织...原创 2020-12-25 00:50:46 · 916 阅读 · 0 评论 -
WPF 框架开发 加入 InternalsVisibleToAttribute 特性让其他程序集可以访问 internal 权限成员
在 WPF 框架开发中,其实很少有开发者有足够的勇气去更改现有的框架逻辑,因为 WPF 的功能十分庞大,很难测试全。更多的开发都是加功能以及开放已有功能。整个 WPF 框架的大体设计是十分好的,可以在框架里面遵循对修改关闭的原则,定制化更多的是做注入,调用 internal 权限成员 本文告诉大家如何给 WPF 框架加入 InternalsVisibleToAttribute 特性让其他程序集可以访问 internal 权限成员原创 2020-12-25 00:50:46 · 442 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 AppDomainShutdownMonitor 的设计
本文是我在读 WPF 源代码做的笔记。在 WPF 中的 AppDomainShutdownMonitor 类是一个不开放的类,这个类当前只是给 D3DImage 类使用。在 AppDomainShutdownMonitor 提供了在应用的进程或程序域关闭的时候,进行一次通知,当前是用来清理 D3DImage 类的资源在 WPF 中的 D3DImage 类是一个充满黑科技的类,这个类因为黑科...原创 2020-12-22 00:44:26 · 573 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 启动欢迎界面 SplashScreen 的原理
本文是我在读 WPF 源代码做的笔记。在 WPF 中的启动界面,为了能让 WPF 的启动界面显示足够快,需要在应用的 WPF 主机还没有启动完成之前就显示出启动图,此时的启动图需要自己解析图片同时也需要自己创建显示窗口从 WPF 的 src\Microsoft.DotNet.Wpf\src\WindowsBase\System\Windows\SplashScreen.cs 文件可以看到 ...原创 2020-12-21 01:09:43 · 910 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 WIC 多媒体图片处理通过 WindowsCodecs.dll 实现功能
本文是我在读 WPF 源代码做的笔记在 WPF 中,作为一个现代化的 UI 框架,自然有很多多媒体相关的事情需要处理,在 WPF 中有特别的一层是 WIC 层,这一层将包揽了大部分的多媒体图片的处理。如咱熟悉的 BitmapEncoder 类,里面就有大量调用到 WIC 的逻辑那么在 WPF 中说的 WIC 层是什么?通过 官方文档 可以了解到 WIC 就是 Windows Imagin...原创 2020-12-21 01:09:43 · 561 阅读 · 0 评论 -
dotnet 读 WPF 源代码笔记 wpfgfx_cor3.dll 是什么文件
本文是我在读 WPF 源代码做的笔记通过 WPF 的架构文档可以了解到在 WPF 里面的架构如下图这里有一层很重要的一层是 MilCore 层,这一层将会沟通 DirectX 和 托管层,而这一层在用户端的逻辑就放在 wpfgfx_cor3.dll 文件里面这个文件的命名定义可以从 src\Microsoft.DotNet.Wpf\src\Shared\RefAssemblyAttr...原创 2020-12-21 01:09:43 · 1061 阅读 · 0 评论