- 博客(210)
- 资源 (2)
- 收藏
- 关注
原创 WPF MVVM入门系列教程(TabControl绑定到列表并单独指定每一页内容)
9 tabList.Add(new TabToolAViewModel() {Detail = "详情...." });我们也可以单独定义每一个Tab页的ViewModel和布局。绑定到一个列表,并单独指定每一个Tab页的标题和内容。接下来我们就可以单独的创建每个Tab页要显示的内容了。此时我们可以创建一个资源字典,并定义数据模板,用于。然后在需要使用的地方,引用 这个资源字典就可以了。有了两个单独的视图以后,如何将它和它们对应的。这个类用于显示Tab页的标题等公共属性。
2025-08-22 12:02:12
454
原创 如何在Windows 10/11家庭版安装组策略编辑器
组策略编辑器是Windows专业版及以上版本提供的管理工具,用于配置组策略设置。家庭版系统默认不包含该功能,但可通过DISM工具手动安装。具体方法:创建批处理文件,调用系统更新包Microsoft-Windows-GroupPolicy-Client*.mum,以管理员身份运行后即可启用gpedit.msc。其原理是通过注册表创建对应项实现策略管理,如禁用Windows更新会在特定路径生成键值。该方案让家庭版用户也能使用专业版的组策略管理功能。
2025-08-22 11:52:24
583
原创 Windows逆向基础(二、Procmon使用实战)
本文介绍了使用Procmon工具监控系统操作的两种实战方法。1.获取历史壁纸路径:通过监听Windows设置界面切换壁纸时的操作记录,直接定位注册表中的图片路径;2.监控QQ文件读取:设置过滤器跟踪QQ启动过程,排除dll文件后查看其读取的本地文件,判断是否存在隐私泄露风险。文章提供了详细的操作步骤和过滤条件设置方法,帮助用户掌握系统监控技巧。
2025-08-21 11:13:28
229
原创 Windows逆向基础(一、使用Procmon监控系统活动)
Windows Sysinternals是一套包含70多种高级诊断工具的Windows套件,其中Procmon是核心监控工具,可实时追踪注册表、文件系统、网络和进程活动。文章详细介绍了Procmon的功能配置(如事件筛选、启动记录)、界面操作(进程树查看、高级输出模式),以及通过API写入自定义调试信息的技术实现(使用DeviceIoControl内核通信)。还提供了Wintellect开发的扩展工具链,帮助开发者深度分析系统行为。全文覆盖基础到高级应用场景,是Windows系统调试的实用指南。
2025-08-21 11:12:03
1195
原创 WPF MVVM进阶系列教程(四、ViewModel通信)
本文介绍了三种WPF中ViewModel间通信的方式:1)通过依赖注入直接调用ViewModel,利用DI容器实现单例模式共享实例;2)自定义消息机制,通过注册/发送实现松耦合通信;3)使用CommunityToolkit.MVVM包的WeakReferenceMessenger工具。重点比较了直接调用与消息传递的差异,并演示了自定义消息总线的实现原理。每种方式各有适用场景,推荐使用成熟的第三方工具包以确保稳定性和功能完整性。
2025-08-20 09:50:36
780
原创 WPF MVVM进阶系列教程(三、使用依赖注入)
本文介绍了在WPF MVVM开发中使用UnityContainer实现依赖注入(DI)的方法。通过对比非DI和DI两种实现方式,展示了DI如何解耦依赖关系,解决服务类实例重复创建的问题。文章详细演示了UnityContainer的配置过程,包括容器初始化、类型注册和生命周期管理,并介绍了ViewModelLocator模式简化ViewModel绑定的技巧。最后指出DI虽能提高代码可维护性,但也会增加复杂度,开发者应根据实际需求权衡使用。附带相关代码示例和资源链接。
2025-08-20 09:48:14
713
原创 Visual Studio中的常用调试功能(下)
本文介绍了Visual Studio调试工具栏中的常用调试功能。主要包括逐语句执行(F11)、逐过程执行(F10)、跳出执行(Shift+F11)和运行到光标处(Ctrl+F10)四种代码执行方式;断点管理技巧如禁用断点、查看所有断点;以及调试过程中的变量查看方法,包括局部变量窗口、自动窗口、即时窗口和并行监视功能。此外还介绍了移动执行指针和查看Windows API错误码的技巧,为开发者提供了全面的Visual Studio调试指南。
2025-08-19 09:46:41
1133
原创 Visual Studio中的常用调试功能(上)
本文介绍了7种代码调试技巧:1)常规断点设置(F9/F5/F10/F11);2)条件断点(指定变量值触发);3)C++数据断点(监控变量变化);4)监视窗口(实时查看变量值);5)快速监视(单次查看变量或表达式结果);6)调用堆栈(追踪函数调用层次);7)内存窗口(查看指针指向的数据)。这些方法覆盖了调试过程中的变量监控、执行流程追踪和内存数据查看等常见需求,能有效提升调试效率。
2025-08-19 09:44:43
646
1
原创 WPF实时调试的一种实现方法
如果我们需要实时查看程序输出,可以将程序的输出类型修改为。然后再配合C#的预处理器指令,就可以实现实时调试。在WPF程序中,如果我们需要对程序进行。这样我们在程序运行后,就可以得到一个。这样我们就可以实时查看调试信息。例如我在界面上放置了一个按钮,模式时,点击按钮输出当前时间。进行实时调试信息输出。时,将输出 类型改为。
2025-07-25 09:43:56
131
原创 WPF MVVM进阶系列教程(二、数据验证)
这篇文章详细介绍了WPF中数据验证(Validation)的实现方式。主要内容包括: 数据验证的基本概念和作用 使用依赖属性进行验证,包括ValidateValueCallback回调的使用 自定义错误模板(ErrorTemplates)的实现 创建自定义验证规则(ValidationRule)的方法 IDataErrorInfo接口的使用和实现细节 验证状态管理(ValidationState)的最佳实践 INotifyDataErrorInfo接口的异步验证实现 文章通过多个实际案例演示了不同验证方式的
2025-07-25 09:42:50
1129
原创 WPF实时调试的一种实现方法
如果我们需要实时查看程序输出,可以将程序的输出类型修改为。然后再配合C#的预处理器指令,就可以实现实时调试。在WPF程序中,如果我们需要对程序进行。这样我们在程序运行后,就可以得到一个。这样我们就可以实时查看调试信息。例如我在界面上放置了一个按钮,模式时,点击按钮输出当前时间。进行实时调试信息输出。时,将输出 类型改为。
2025-05-08 10:04:31
426
原创 C#串口通信
2 /// ASCII字符转换成十六进制字节数组。2 /// 转换成ASCII字符。23 /// 接收十六进制数据。2 /// 接收原始数据。3 //在这里处理接收到的数据。
2025-05-08 10:02:43
322
原创 WPF MVVM进阶系列教程(一、对话框)
14 <Button Content="显示详情" Width="88" Height="28" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1" Command="{Binding ShowStudentDetailCommand}"></Button>在单元测试中,我们可以注入一个虚假的对话框服务实例,而不是显示实际的对话框,并使用我们的虚假对象进行预留和模拟。
2025-05-07 10:33:29
1161
原创 WPF MVVM入门系列教程(六、ViewModel案例演示)
44 <Button Content="新增" Width="88" Height="28" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1" Command="{Binding AddBookCommand}"/>30 <Label Content="价格 ¥: " Foreground="Red" FontWeight="Bold"></Label>
2025-05-07 10:07:12
1279
原创 WPF MVVM入门系列教程(五、命令和用户输入)
10 <Button Content="按钮3" Name="btn3" Command="{Binding ShowMessageCommand}" CommandParameter="{Binding ElementName=btn3,Path=Content}" VerticalAlignment="Center" Width="128" Height="28" Margin="10"></Button>命令时,我们可以根据需要传递的参数类型,使用对应的泛型参数。
2025-05-06 09:24:33
1458
1
原创 WPF MVVM入门系列教程(四、ViewModel)
SoC 的一个关键目标是尽可能地限制依赖关系,并在必须存在依赖关系的地方在必须存在依赖关系的情况下,将其抽象化,以保护客户端代码不被更改。过于相互依赖的代码是很难维护的,因为一次修改就会破坏无数个部分。最糟糕的代码依赖循环依赖,即两个方法或两个类相互依赖。相互依赖。为了解决循环依赖问题,我们必须确保依赖关系有正确的方向。换句话说,代码从下到上形成一个层次结构,较高层次的代码依赖于较低层次的代码。
2025-05-06 09:21:34
1296
原创 如何在WPF中对UI进行自动化测试(通过外部代码操作WPF内部UI元素)
记得早些年在深圳做设备的时候,公司测试使用了一款能自动测试WPF界面的工具,它能模拟点击,能记录步骤,也能获取输出。但具体名称忘记了。因为WPF界面元素是没有句柄的,所以无法对其它进行外部控制(非软件内部),所以早些年只能对的一些界面通过WinApi进行外部控制。也是最近在看代码时,看到了这个dll,就找资料来学习了一下。是适用于 Microsoft Windows 的新辅助功能框架,可在支持的所有操作系统上使用。
2025-04-07 09:21:35
997
原创 WPF如何修改三方控件库的样式
nuget上的包基本是开源的,但是除非是离线环境,否则不建议将包源码直接放到工程里。--创建一个名称一样的资源即可-->如果我们想修改选中的颜色,最简单的方案就是创建一个跟控件库中一样名字的。,再修改控件模板即可,这样我们能继承大部分的样式效果。下面的修改示例是针对直接使用nuget包的。,然后找到这个资源名称,创建一个一样的即可。我们打开wpf-ui包的源码,搜索。然后我们新建一个样式,继承自。的控件模板,找到设置圆角的。首先我们在界面上添加一个。例如,当鼠标划过一个。
2025-04-07 09:20:13
1029
原创 处理LibVLCSharp.WPF鼠标点击事件
仔细观察发现,VideoView是一个内容控件,但是运行后,发现VideoView.Content是为空的,说明VideoView只是一个宿主控件而已。此时我们只需要设置一下VideoView.Content为一个面板,并设置透明度为几乎透明的状态,这样,我们能看到视频播放效果,也能对事件进行处理。在WPF里,会有事件路由机制,但是Win32里没有,所以这个事件就是直接被。但是初次尝试,发现创建钩子不成功,后面又尝试了一下,使用子窗口。因为我以前没用过VLC控件,但是最近有小伙伴问到我这个问题。
2025-03-10 11:30:04
1251
原创 WPF预览并打印FlowDocument
21 <Button Content="加载" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Height="28" Click="Button_Click"></Button>在前面的文章中,介绍过通过FixedDocument进行预览并打印。但是有时候我们可能使用的是。
2025-03-10 11:28:02
846
原创 如何获取BIOS信息
2 {// 结构类型// 该类型结构的格式化区域长度(请注意,长度取决于主板或系统支持的具体版本)// 结构句柄(0~0xFEFF范围内的数字)这里以Type 1 BIOS 系统信息为例2 // 系统信息(Type 1)SMBIOS结构的格式化区域的完整定义4 {// SMBIOS结构头SMBIOSHeader// Manufacturer字符串的编号// Product Name字符串的编号// Version字符串的编号。
2025-03-05 15:45:16
1211
原创 如何在Windows下离线部署DeepSeek并以WebApi形式调用
最近这一块的话题有点火,这里也找资料学习了解了一下,分享出来。目前应该有很多公司已经通过官方的WebApi接口接入了DeepSeek。本文可以帮助你离线使用DeepSeek的WebApi,并集成到自己的程序里。文末会有示例程序。是一个开源的 AI 模型服务平台,旨在提供高效且易于使用的 AI 模型部署和管理解决方案。它结合了强大的计算能力和灵活的模型接口,使用户能够轻松构建、训练和部署自定义 AI 模型。目前支持在本地运行包括但不限于, 等模型。目前还无法选择路径,会自动安装到C盘。
2025-03-05 15:42:53
1114
原创 WPF中对滚动条进行平滑滚动
11 <Button Content="普通滚动" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Click="Button_Click" Margin="-120,0,0,0"></Button>一开始我想的是通过一个循环,缓动增加Y的位置,这样就达到了动画效果。我们也可以借助WPF的Animation来做,这样效果会更好。7 // 获取选择元素的位置。11 //滚动到指定位置。
2025-02-28 23:54:07
1190
原创 如何使用git的reset功能重置代码
像平常我们提交时,需要先使用git add命令,将修改的文件添加到索引文件中,然后再调用git commit 进行提交。在我前面的文章中,介绍了如何删除不想要的commit,这里的功能 就是借助git reset --soft。首先创建三次提交,分别为commit 1、commit 2、commit 3。简单来说,执行git reset,会将指定commit前面所有的commit都重置。后,可以看到在左侧的列表并不会看到任何修改,因为。,这里不做详细介绍。将分支重置,并且不保留这些分支修改的文件。
2025-02-28 23:52:44
1017
原创 COM智能指针ComPtr的介绍以及使用
ComPtr是为COM而设计的智能指针。相比ATL里的CComPtr类,它有了一些提升。ComPtr会自动维护基础接口指针的引用计数,并在参考计数为零时释放接口,从而消除内存泄漏。2、开启了/clr支持的托管C++是不能使用WRL的,这时候可以使用ATL里面的CComPtr,原理和ComPtr一样,使用方法有一点小区别,可以查看。使用智能指针后,不需要再调用Release()进行释放,关于详细的引用计数,可以访问文末参考资料里的链接进行了解。1、在C++/WinRT 项目中,应该使用。与许多智能指针一样,
2025-01-10 14:02:34
947
原创 如何在C#中使用COM接口
Windows中很多功能都是通过COM实现的,有时候我们想实现一些系统功能,但是又没有直接的Win32 API代调用,就可以寻找COM接口替代。使用CsWin32生成COM接口的声明,在官方的文档中并未直接说明,我也是在一个issue中找到了实现方法。对于自动生成的类型,命名空间都不一样,但是都是在Windows.Win32命名空间下。在C++中,可以使用CoCreateInstance函数来创建COM接口的实例。],然后在结果中查找,一般会有C#的接口声明,如果没找到相关结果,可以查看方法2。
2025-01-10 13:51:36
1229
原创 WPF自定义任务栏缩略图
但是这种预览是基于窗口本身内容的,如果我们想修改这个缩略图的内容,类似网易云这样,就需要一些技术手段。参数设置的属性值的大小(以字节为单位)。当鼠标划会任务栏上的程序时,会打开一个预览窗口,可以对整个窗口内容进行预览。在后面的Windows 8/8.1/10/11系统上,都延续了这个功能。指向包含要设置的属性值的对象的指针。设置窗口管理器(DWM)非客户端呈现属性的值。窗口或选项卡的句柄。此参数指定要设置的属性,要为其设置属性值的窗口的句柄。描述要设置的值的标志,指定为。参数指向包含属性值的对象。
2025-01-03 09:26:26
1262
原创 PowerShell入门教程
什么是Powershell?MSDN上的说明是:PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言。 PowerShell 可帮助系统管理员和高级用户快速自动执行用于管理操作系统(Linux、macOS 和 Windows)和流程的任务。使用 PowerShell 命令可以从命令行管理计算机。 PowerShell 提供程序可让你访问数据存储(如注册表和证书存储),与你访问文件系统一样方便。 PowerShell 具有丰富的表达式分析器和完全开发的脚本语言。个人理解为Pow
2024-12-31 09:18:41
992
原创 WPF中的VisualState(视觉状态)
VisualState类实现了可以让控件始终处于特定的状态的功能。例如,当鼠标在控件的表面上移动时,该控件被视为处于。调用System.Windows.VisualStateManager.GoToState函数,可以指定控件的状态。在应用于控件的每个状态组中,控件始终处于每个组的一种状态。但是,控件不能处于同一组中的两种不同状态。状态分为多个组,前面提到的MouseMove状态和Normal属于。如果是自定义控件,直接将控件名换成this即可。没有特定状态的控件被视为处于。
2024-12-03 09:28:58
1528
原创 WPF从本地文件加载界面
在前面的文章中,我介绍过一种报告模板的实现思路。就是用的XAML本地加载。WPF使用XAML实现报表的一种思路(支持外部加载) - zhaotianff - 博客园在另外一篇文章中,介绍了XAML是如何被转换成对象的。WPF中的XAML是如何转换成对象的? - zhaotianff - 博客园在这篇文章中,简单介绍了InitializeComponent函数,它的内部如下:在任意一个界面的构造函数下都会调用InitializeComponent函数,也就是在InitializeC
2024-12-03 09:25:09
1128
原创 C++结构体初始化 struct= {0}、struct={} 和 struct{}的区别
后面我在学C++的时候,在初始化结构体时,都习惯了使用C++ 11里的 一致性初始化(Uniform Initialization)这里在stackoverflow上搜到一个高赞回答,做个笔记记录一下。C语言学了好多年,很多基础理论都不记得了。因为一直都是C#用得多。可以看到上面 3种常用的写法在初始化时并不能很好地进行清零操作。所以也想搞清楚这些初始化方法的区别是什么。最近在书上看到的写法是。
2024-11-29 09:23:54
1053
原创 git从服务器获取最新代码
在使用Visual Studio的Pull时,界面会显示Incoming,但是无法合并到本地代码。main就是当前分支的名称。
2024-11-29 09:20:58
209
原创 git如何创建一次没有修改的commit
因为公司的打包服务器需要代码提交,才会自动进行打包,而我又没权限进行手动打包。所以最快的解决办法就是创建一次没有修改的提交。这种在实际使用中应该很难碰到,我最近刚好遇上这样一个问题。
2024-11-29 09:18:44
566
原创 如何在WPF中打印PDF文件
当用户右键单击 Shell 对象(如文件)时,Shell 会显示 (上下文) 菜单的快捷方式。此菜单包含一个命令列表,用户可以选择这些命令对项执行各种操作。这些命令也称为快捷菜单项或谓词。可以自定义快捷菜单。6 FileName = path //PDF文件路径。时,系统会到注册表寻找当前类型文件的注册程序节点下的。所使用的的PDF渲染引擎。项目的PDF查看器。当我们在创建进程时,,并执行其中的命令。
2024-11-29 09:15:34
2169
原创 C#反序列化XML时提示XML 文档(1, 1)中有错误
\r\n\r\n 200\r\n 成功\r\n";使用Utf-8编码获取字节数组,再通过调用Deserialize的重载,将字节数组转换成流传进去。看描述应该是XML格式的问题,我把XML复制到新建的控制台程序,反序列化又是可以的。在Stackoverflow上找到一个解决方案,这里分享一下。
2024-11-29 09:13:28
762
原创 如何禁用Visual Studio 2022 AI代码提示(带五角星的代码)
在Visual Studio 2019中可以通过禁用扩展来停用这一功能,但到Visual Studio 2022时,这一项功能已经变成自带功能了。在Visual Studio 2019及以后的版本中,增加了IntelliCode功能,在WPF XAML布局时,这一项功能并不是非常方便。如果不需要此功能,也可以在安装时取消钩选。功能介绍可以参考我前面的一篇文章。
2024-11-28 16:49:39
1254
原创 在WPF使用Segoe MDL2字体图标库
因为是自带的字体文件,所以直接指定FontFamily即可,非常方便。任何内容控件都可以使用。以前一直用的FontAwesome字体图标,也是最近才知道,原来微软官方就有一套字体图标库。Windows 11自带的是Segoe Fluent。Windows 10自带的是Segoe MDL2。字体文件是Windows自带。官网搜索,或者访问我的。
2024-11-28 16:47:05
1031
原创 git如何将当前的修改提交到其它分支
使修改后的文件转移到堆栈中。因此,后来在同一或在另一个分支中,能够将它们带回去,并在项目中查看这些修改。阶段是提交的前一步,将修改的文件添加到“Staged files”中以创建下一个提交。切换分支后, 将暂存的文件恢复。再将修改的内容放到新的分支中。此时,按正常提交即可。
2024-11-21 09:16:43
1013
原创 如何在WPF中嵌入其它程序
这里我们以WPF嵌入WPF来进行演示,其它程序也可以嵌入,但是要注意:被嵌入的窗口必须是无边框且置顶的。像一般的窗口程序都可以设置窗口类型,如果是嵌入Unity这种无法控制窗口类型的,可以调用。此时我们还需要处理一些窗口的事件,比如最大化,最小化,移动和大小改变等。在窗口的Loaded事件中创建其它程序进程,并嵌入。其它的操作可以参考示例代码,这里不做详细介绍。在父窗口中,窗口关闭时,发送消息到子窗口即可。此时我们运行后,就可以看到窗口已经被嵌入。在WPF中嵌入其它程序,这里提供两种方案。
2024-11-21 09:07:08
1997
Oracle Berkeley DB 18.1.32
2025-04-29
codeblocks-20.02mingw官网下载,codeblocks官网的资源下载太慢,做一个搬运
2024-08-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人