自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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中的Microsoft XAML Behaviors包功能详解

提供了一种简单易用的方法,能以最少的代码为。

2024-12-31 09:10:55 1845

原创 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

qt-online-installer-windows-x64-4.10.0

qt x64 4.10社区版在线安装包

2025-08-05

SoapUI-x64-5.8.0

开源版本的REST和Soap API自动化测试工具。安装包来自官方下载文件,官网下载速度太慢,做一个搬运。

2025-06-26

Oracle Berkeley DB 18.1.32

Oracle Berkeley DB 18.1.32 官方源码。 支持Windows/Linux/android/vxworks等平台,可以根据自己需要进行编译,支持C#/JAVA/C++等常用语言。

2025-04-29

cmake-4.0.1-windows-x86-64

cmake-4.0.1-windows-x86_64版本,官网下载速度太慢,做一个搬运。免安装版,解压即用。

2025-04-29

codeblocks-20.02mingw官网下载,codeblocks官网的资源下载太慢,做一个搬运

codeblocks-20.02mingw官网下载,codeblocks官网的资源下载太慢,做一个搬运

2024-08-23

inkscape-1.3.2 portable-2023-11-25(强大免费的设计工具Inkscape)

官网下载太慢了,这里做一个搬运。

2024-03-08

WPF图片放大镜

实现了类似电商网站商品浏览的效果,比例计算不是非常精确 ,仅供参考。。。第一次上传资源 。

2017-10-24

在WPF中对现有图像进行绘制的两种方法

在WPF中对现有图像进行绘制的两种方法。第二次上传资源。

2017-10-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除