自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(192)
  • 资源 (2)
  • 收藏
  • 关注

原创 WPF MVVM实战系列教程(二、使用Visual Studio 创建Prism项目)

方法2就等于将方法1的过程全部变成自动化了,帮助我们搭建好了项目环境,如nuget包引用、ViewModel绑定、Bootstrapper(后面会介绍)等。然后我们重新启动Visual Studio,系统会提示你安装扩展,点击 Modify 按钮开始安装,如下所示。推荐在前期学习过程中,选择第一种方式,自己创建,这样才能帮助自己更好的理解整个项目结构。在后面我们会使用依赖注入,所以还需要安装一个Prism支持的DI容器框架。我们这里选择创建一个Prism空程序,此时就可以得到一个Prism工程。

2025-12-30 09:52:06 565

原创 WPF MVVM实战系列教程(一、Prism框架介绍)

我的建议是循序渐进,前期不理解没关系,可以根据我文章中的内容和示例代码,多理解几遍,然后再自己尝试用一些小例子去进行演练,慢慢就能理解其中的原理。提供的导航抽象层既支持单元测试,又基于平台原生导航概念与API构建,使开发者能充分利用平台特性,同时保持MVVM架构的规范性。这个框架的最初目的是为了方便我们构建强大的XAML应用程序,它包含的功能比较多,MVVM只是它的一部分功能。还是前面的那句话 ,框架的作用是为了帮我们更好的解决问题、实现需求,提升可维护性,切勿本末倒置。

2025-12-30 09:47:59 1289

原创 一文带你掌握Visual Studio中集成的git功能

Visual Studio中深度集成了git功能,可以很方便的进行源代码版本控制功能。大部分日常的操作我们可以通过界面来完成,这样就省去了输入git命令的时间,也可以不用记很多参数。但这毕竟是辅助工具,掌握常用的git命令行还是很有必要的。言归正传,接下来开始介绍Visual Studio 中集成的git功能。本文以Visual Studio 2022为例进行演示。

2025-11-20 09:16:41 1260

原创 如何创建不需要Visual C++运行时的独立C++程序

以前在书上看到过基于Visual C++的程序也是可以打包成无依赖的独立程序,但是一直没有深入去了解过。使用的是.Net Framework,对于新版本系统来说,自带了.NET运行时,可以一键运行安装包。但是对于老版本系统,例如Windows 7/XP,需要安装.NET运行时,那安装过程就变得复杂了。并且在未安装Visual C++运行时电脑上运行时,也会报错。此时不需要Visual C++运行时,也可以运行MFC程序。在未配置属性前,可以看到文件的大小是216KB。最近也是查资料,实现了一下这个功能。

2025-10-21 10:00:00 356

原创 如何发布属于自己的nuget包

当包安装到项目中时,NuGet 自动将程序集引用添加到包的 DLL,不包括命名为 .resources.dll 的内容,因为它们被假定为本地化的附属程序集。:此版本包中所作更改的说明,通常代替包说明用在 UI 中,如 Visual Studio 包管理器的“更新”选项卡。等nuget.org索引完成,就可以在Visual Studio的包管理器中搜索到你刚刚发布的包。此外,在前面指定.NET版本依赖的基础下,我们还可以单独指定对应的包依赖。如果我们自己的包里,也依赖了其它包,应该如何处理呢?

2025-10-21 09:43:05 1102

原创 WPF中的坐标转换

函数的作用是将屏幕坐标中的点转换为当前元素坐标系中的点。通俗点来说,就是把屏幕上的某个点转换为相对于WPF元素的点。这里为什么要讲控件内部的位置转换,是因为有时候我们需要自定义控件或对原生控件进行增强。因为本文只介绍位置计算相关的知识点,如果需要学习支持排序的ListBox,可以参考。这里的位置计算方法跟前面的一样,但前提是我们要获取它的控件模板,可以通过。方法,这个方法的作用是将相对于此元素的点转换为相对于指定元素的坐标。函数的作用是将当前元素坐标系中的点转换为屏幕坐标中的点。

2025-10-17 10:10:06 1454

原创 WPF中的变换(Transform)功能详解

例如,首先使用RotateTransform旋转形状,然后使用TranslateTransform移动形状,这样做的结果和先移动再旋转的结果是不同的。换句话说,点(0,0)被指定为左上角,点(1,1)表示右下角(如果形状区域不是正方形,那么会相应地拉伸坐标系统)。--水平倾斜10度 垂直倾斜10度-->--缩放中心点是75,100-->--倾斜中心点是75,100-->--水平倾斜10度 垂直倾斜10度-->--倾斜中心点是75,100-->--角度:90度-->--缩放中心点是75,100-->

2025-10-17 10:08:19 1429

原创 Visual Studio 命令和属性的常用宏定义(macros for MSBuild commands and properties)

根据Visual Studio的安装选项,Visual Studio 可以在基于 的 Visual Studio 项目中提供数百个宏。这些宏对应于 属性,它们要么是默认设置的,要么是在 或 文件中,或者在项目设置中设置的。这些宏可以帮助我们对项目进行一些增强性的配置。例如在一个C++项目中,我们可以看到如下配置,这里就是使用了它最后的路径是动态计算出来的我们可以在项目对话框中接受字符串的任意位置使用这些宏。 这些宏不区分大小写。我们也可以点击按钮,来查看所有预计算的举个简单的例子来说,假设我现在创建一

2025-10-16 10:03:35 1237

原创 如何在WPF中实现ComboBox多选

2 students.Add(new Student() { Id = 1, Name = "张三" });对于对象,如果我们需要控制它的下位项和选中项的显示值,可以通过重写。这个功能不过多介绍,跟其它列表控件的数据模板使用方法一致。对于系统提供的基础类型,下位项和选中项会显示实际值。如果对数据模板功能不了解,可以参考下面的链接。这里我们可以通过数据模板来控制显示,也可以直接使用系统提供的基础类型,如。,我们可以设置为其它字符,例如。1 //假设选中1,3项。控件,可以支持多选。6 //设置选中项。

2025-10-16 10:00:42 1511

原创 WPF MVVM入门系列教程(TabControl绑定到列表并单独指定每一页内容)

9 tabList.Add(new TabToolAViewModel() {Detail = "详情...." });我们也可以单独定义每一个Tab页的ViewModel和布局。绑定到一个列表,并单独指定每一个Tab页的标题和内容。接下来我们就可以单独的创建每个Tab页要显示的内容了。此时我们可以创建一个资源字典,并定义数据模板,用于。然后在需要使用的地方,引用 这个资源字典就可以了。有了两个单独的视图以后,如何将它和它们对应的。这个类用于显示Tab页的标题等公共属性。

2025-08-22 12:02:12 1194

原创 如何在Windows 10/11家庭版安装组策略编辑器

组策略编辑器是Windows专业版及以上版本提供的管理工具,用于配置组策略设置。家庭版系统默认不包含该功能,但可通过DISM工具手动安装。具体方法:创建批处理文件,调用系统更新包Microsoft-Windows-GroupPolicy-Client*.mum,以管理员身份运行后即可启用gpedit.msc。其原理是通过注册表创建对应项实现策略管理,如禁用Windows更新会在特定路径生成键值。该方案让家庭版用户也能使用专业版的组策略管理功能。

2025-08-22 11:52:24 5451

原创 Windows逆向基础(一、使用Procmon监控系统活动)

Windows Sysinternals是一套包含70多种高级诊断工具的Windows套件,其中Procmon是核心监控工具,可实时追踪注册表、文件系统、网络和进程活动。文章详细介绍了Procmon的功能配置(如事件筛选、启动记录)、界面操作(进程树查看、高级输出模式),以及通过API写入自定义调试信息的技术实现(使用DeviceIoControl内核通信)。还提供了Wintellect开发的扩展工具链,帮助开发者深度分析系统行为。全文覆盖基础到高级应用场景,是Windows系统调试的实用指南。

2025-08-21 11:12:03 2520

原创 WPF MVVM进阶系列教程(四、ViewModel通信)

本文介绍了三种WPF中ViewModel间通信的方式:1)通过依赖注入直接调用ViewModel,利用DI容器实现单例模式共享实例;2)自定义消息机制,通过注册/发送实现松耦合通信;3)使用CommunityToolkit.MVVM包的WeakReferenceMessenger工具。重点比较了直接调用与消息传递的差异,并演示了自定义消息总线的实现原理。每种方式各有适用场景,推荐使用成熟的第三方工具包以确保稳定性和功能完整性。

2025-08-20 09:50:36 1093

原创 WPF MVVM进阶系列教程(三、使用依赖注入)

本文介绍了在WPF MVVM开发中使用UnityContainer实现依赖注入(DI)的方法。通过对比非DI和DI两种实现方式,展示了DI如何解耦依赖关系,解决服务类实例重复创建的问题。文章详细演示了UnityContainer的配置过程,包括容器初始化、类型注册和生命周期管理,并介绍了ViewModelLocator模式简化ViewModel绑定的技巧。最后指出DI虽能提高代码可维护性,但也会增加复杂度,开发者应根据实际需求权衡使用。附带相关代码示例和资源链接。

2025-08-20 09:48:14 967

原创 Visual Studio中的常用调试功能(下)

本文介绍了Visual Studio调试工具栏中的常用调试功能。主要包括逐语句执行(F11)、逐过程执行(F10)、跳出执行(Shift+F11)和运行到光标处(Ctrl+F10)四种代码执行方式;断点管理技巧如禁用断点、查看所有断点;以及调试过程中的变量查看方法,包括局部变量窗口、自动窗口、即时窗口和并行监视功能。此外还介绍了移动执行指针和查看Windows API错误码的技巧,为开发者提供了全面的Visual Studio调试指南。

2025-08-19 09:46:41 1498

原创 Visual Studio中的常用调试功能(上)

本文介绍了7种代码调试技巧:1)常规断点设置(F9/F5/F10/F11);2)条件断点(指定变量值触发);3)C++数据断点(监控变量变化);4)监视窗口(实时查看变量值);5)快速监视(单次查看变量或表达式结果);6)调用堆栈(追踪函数调用层次);7)内存窗口(查看指针指向的数据)。这些方法覆盖了调试过程中的变量监控、执行流程追踪和内存数据查看等常见需求,能有效提升调试效率。

2025-08-19 09:44:43 1114 1

原创 WPF实时调试的一种实现方法

如果我们需要实时查看程序输出,可以将程序的输出类型修改为。然后再配合C#的预处理器指令,就可以实现实时调试。在WPF程序中,如果我们需要对程序进行。这样我们在程序运行后,就可以得到一个。这样我们就可以实时查看调试信息。例如我在界面上放置了一个按钮,模式时,点击按钮输出当前时间。进行实时调试信息输出。时,将输出 类型改为。

2025-07-25 09:43:56 262

原创 WPF MVVM进阶系列教程(二、数据验证)

这篇文章详细介绍了WPF中数据验证(Validation)的实现方式。主要内容包括: 数据验证的基本概念和作用 使用依赖属性进行验证,包括ValidateValueCallback回调的使用 自定义错误模板(ErrorTemplates)的实现 创建自定义验证规则(ValidationRule)的方法 IDataErrorInfo接口的使用和实现细节 验证状态管理(ValidationState)的最佳实践 INotifyDataErrorInfo接口的异步验证实现 文章通过多个实际案例演示了不同验证方式的

2025-07-25 09:42:50 1355

原创 C#串口通信

2 /// ASCII字符转换成十六进制字节数组。2 /// 转换成ASCII字符。23 /// 接收十六进制数据。2 /// 接收原始数据。3 //在这里处理接收到的数据。

2025-05-08 10:02:43 411

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

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

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

原创 WPF MVVM入门系列教程(四、ViewModel)

SoC 的一个关键目标是尽可能地限制依赖关系,并在必须存在依赖关系的地方在必须存在依赖关系的情况下,将其抽象化,以保护客户端代码不被更改。过于相互依赖的代码是很难维护的,因为一次修改就会破坏无数个部分。最糟糕的代码依赖循环依赖,即两个方法或两个类相互依赖。相互依赖。为了解决循环依赖问题,我们必须确保依赖关系有正确的方向。换句话说,代码从下到上形成一个层次结构,较高层次的代码依赖于较低层次的代码。

2025-05-06 09:21:34 1467

原创 如何在WPF中对UI进行自动化测试(通过外部代码操作WPF内部UI元素)

记得早些年在深圳做设备的时候,公司测试使用了一款能自动测试WPF界面的工具,它能模拟点击,能记录步骤,也能获取输出。但具体名称忘记了。因为WPF界面元素是没有句柄的,所以无法对其它进行外部控制(非软件内部),所以早些年只能对的一些界面通过WinApi进行外部控制。也是最近在看代码时,看到了这个dll,就找资料来学习了一下。是适用于 Microsoft Windows 的新辅助功能框架,可在支持的所有操作系统上使用。

2025-04-07 09:21:35 1240

原创 WPF如何修改三方控件库的样式

nuget上的包基本是开源的,但是除非是离线环境,否则不建议将包源码直接放到工程里。--创建一个名称一样的资源即可-->如果我们想修改选中的颜色,最简单的方案就是创建一个跟控件库中一样名字的。,再修改控件模板即可,这样我们能继承大部分的样式效果。下面的修改示例是针对直接使用nuget包的。,然后找到这个资源名称,创建一个一样的即可。我们打开wpf-ui包的源码,搜索。然后我们新建一个样式,继承自。的控件模板,找到设置圆角的。首先我们在界面上添加一个。例如,当鼠标划过一个。

2025-04-07 09:20:13 1100

原创 处理LibVLCSharp.WPF鼠标点击事件

仔细观察发现,VideoView是一个内容控件,但是运行后,发现VideoView.Content是为空的,说明VideoView只是一个宿主控件而已。此时我们只需要设置一下VideoView.Content为一个面板,并设置透明度为几乎透明的状态,这样,我们能看到视频播放效果,也能对事件进行处理。在WPF里,会有事件路由机制,但是Win32里没有,所以这个事件就是直接被。但是初次尝试,发现创建钩子不成功,后面又尝试了一下,使用子窗口。因为我以前没用过VLC控件,但是最近有小伙伴问到我这个问题。

2025-03-10 11:30:04 1375

原创 WPF预览并打印FlowDocument

21 <Button Content="加载" HorizontalAlignment="Center" VerticalAlignment="Center" Width="88" Height="28" Click="Button_Click"></Button>在前面的文章中,介绍过通过FixedDocument进行预览并打印。但是有时候我们可能使用的是。

2025-03-10 11:28:02 913

原创 如何获取BIOS信息

2 {// 结构类型// 该类型结构的格式化区域长度(请注意,长度取决于主板或系统支持的具体版本)// 结构句柄(0~0xFEFF范围内的数字)这里以Type 1 BIOS 系统信息为例2 // 系统信息(Type 1)SMBIOS结构的格式化区域的完整定义4 {// SMBIOS结构头SMBIOSHeader// Manufacturer字符串的编号// Product Name字符串的编号// Version字符串的编号。

2025-03-05 15:45:16 1512

原创 如何在Windows下离线部署DeepSeek并以WebApi形式调用

最近这一块的话题有点火,这里也找资料学习了解了一下,分享出来。目前应该有很多公司已经通过官方的WebApi接口接入了DeepSeek。本文可以帮助你离线使用DeepSeek的WebApi,并集成到自己的程序里。文末会有示例程序。是一个开源的 AI 模型服务平台,旨在提供高效且易于使用的 AI 模型部署和管理解决方案。它结合了强大的计算能力和灵活的模型接口,使用户能够轻松构建、训练和部署自定义 AI 模型。目前支持在本地运行包括但不限于, 等模型。目前还无法选择路径,会自动安装到C盘。

2025-03-05 15:42:53 1242

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

原创 如何使用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 1132

原创 COM智能指针ComPtr的介绍以及使用

ComPtr是为COM而设计的智能指针。相比ATL里的CComPtr类,它有了一些提升。ComPtr会自动维护基础接口指针的引用计数,并在参考计数为零时释放接口,从而消除内存泄漏。2、开启了/clr支持的托管C++是不能使用WRL的,这时候可以使用ATL里面的CComPtr,原理和ComPtr一样,使用方法有一点小区别,可以查看。使用智能指针后,不需要再调用Release()进行释放,关于详细的引用计数,可以访问文末参考资料里的链接进行了解。1、在C++/WinRT 项目中,应该使用。与许多智能指针一样,

2025-01-10 14:02:34 1207

原创 如何在C#中使用COM接口

Windows中很多功能都是通过COM实现的,有时候我们想实现一些系统功能,但是又没有直接的Win32 API代调用,就可以寻找COM接口替代。使用CsWin32生成COM接口的声明,在官方的文档中并未直接说明,我也是在一个issue中找到了实现方法。对于自动生成的类型,命名空间都不一样,但是都是在Windows.Win32命名空间下。在C++中,可以使用CoCreateInstance函数来创建COM接口的实例。],然后在结果中查找,一般会有C#的接口声明,如果没找到相关结果,可以查看方法2。

2025-01-10 13:51:36 1332

原创 WPF自定义任务栏缩略图

但是这种预览是基于窗口本身内容的,如果我们想修改这个缩略图的内容,类似网易云这样,就需要一些技术手段。参数设置的属性值的大小(以字节为单位)。当鼠标划会任务栏上的程序时,会打开一个预览窗口,可以对整个窗口内容进行预览。在后面的Windows 8/8.1/10/11系统上,都延续了这个功能。指向包含要设置的属性值的对象的指针。设置窗口管理器(DWM)非客户端呈现属性的值。窗口或选项卡的句柄。此参数指定要设置的属性,要为其设置属性值的窗口的句柄。描述要设置的值的标志,指定为。参数指向包含属性值的对象。

2025-01-03 09:26:26 1399

原创 PowerShell入门教程

什么是Powershell?MSDN上的说明是:PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言。 PowerShell 可帮助系统管理员和高级用户快速自动执行用于管理操作系统(Linux、macOS 和 Windows)和流程的任务。使用 PowerShell 命令可以从命令行管理计算机。 PowerShell 提供程序可让你访问数据存储(如注册表和证书存储),与你访问文件系统一样方便。 PowerShell 具有丰富的表达式分析器和完全开发的脚本语言。个人理解为Pow

2024-12-31 09:18:41 1118

原创 WPF中的Microsoft XAML Behaviors包功能详解

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

2024-12-31 09:10:55 2227

原创 WPF中的VisualState(视觉状态)

VisualState类实现了可以让控件始终处于特定的状态的功能。例如,当鼠标在控件的表面上移动时,该控件被视为处于。调用System.Windows.VisualStateManager.GoToState函数,可以指定控件的状态。在应用于控件的每个状态组中,控件始终处于每个组的一种状态。但是,控件不能处于同一组中的两种不同状态。状态分为多个组,前面提到的MouseMove状态和Normal属于。如果是自定义控件,直接将控件名换成this即可。没有特定状态的控件被视为处于。

2024-12-03 09:28:58 1732

原创 WPF从本地文件加载界面

在前面的文章中,我介绍过一种报告模板的实现思路。就是用的XAML本地加载。WPF使用XAML实现报表的一种思路(支持外部加载) - zhaotianff - 博客园在另外一篇文章中,介绍了XAML是如何被转换成对象的。WPF中的XAML是如何转换成对象的? - zhaotianff - 博客园在这篇文章中,简单介绍了InitializeComponent函数,它的内部如下:在任意一个界面的构造函数下都会调用InitializeComponent函数,也就是在InitializeC

2024-12-03 09:25:09 1235

原创 C++结构体初始化 struct= {0}、struct={} 和 struct{}的区别

后面我在学C++的时候,在初始化结构体时,都习惯了使用C++ 11里的 一致性初始化(Uniform Initialization)这里在stackoverflow上搜到一个高赞回答,做个笔记记录一下。C语言学了好多年,很多基础理论都不记得了。因为一直都是C#用得多。可以看到上面 3种常用的写法在初始化时并不能很好地进行清零操作。所以也想搞清楚这些初始化方法的区别是什么。最近在书上看到的写法是。

2024-11-29 09:23:54 1211

原创 如何在WPF中打印PDF文件

当用户右键单击 Shell 对象(如文件)时,Shell 会显示 (上下文) 菜单的快捷方式。此菜单包含一个命令列表,用户可以选择这些命令对项执行各种操作。这些命令也称为快捷菜单项或谓词。可以自定义快捷菜单。6 FileName = path //PDF文件路径。时,系统会到注册表寻找当前类型文件的注册程序节点下的。所使用的的PDF渲染引擎。项目的PDF查看器。当我们在创建进程时,,并执行其中的命令。

2024-11-29 09:15:34 2357

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关注的人

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