Extensions 扩展库
12. Extensions 扩展库位置Source/Extensions分类速查类型项目示例应用/MVVMH.Extensions.ApplicationBase、H.Extensions.Mvvm、H.Extensions.Command、H.Extensions.Behvaiors数据/序列化H.Extensions.DataBase、H.Extensions.DataBase.Repository、H.Extensions.XmlSerialize、H.Extensions.NewtonsoftJson文件/路径/进程H.Extensions.AppPath、H.Extensions.OpenFolderDialog、H.Extensions.Zip、H.Extensions.ProcessUI/视觉H.Extensions.Animations、H.Extensions.StoryBoard、H.Extensions.Color、H.Extensions.Geometry、H.Extensions.FontIcon业务支持H.Extensions.Excel、H.Extensions.Encryption、H.Extensions.Mail、H.Extensions.Http、H.Extensions.Validation、H.Extensions.Revertible看扩展库时优先找Extension.cs或Extention.cs它通常是使用入口。Extensions 扩展库详解一、扩展库概述Source/Extensions是 WPF-Control 的工具方法集合提供各种实用的扩展方法和辅助功能。这些扩展库遵循即插即用的设计理念通过静态方法或扩展方法的形式提供服务。核心特点扩展库通常以Extension.cs或Extention.cs作为入口方便快速查找和使用。二、扩展库分类速查2.1 分类总览类型项目示例功能说明应用/MVVMH.Extensions.ApplicationBase应用启动基座H.Extensions.MvvmMVVM 辅助方法H.Extensions.Command命令扩展H.Extensions.Behvaiors行为扩展数据/序列化H.Extensions.DataBase数据库基础H.Extensions.DataBase.Repository仓储模式H.Extensions.XmlSerializeXML 序列化H.Extensions.NewtonsoftJsonJSON 序列化文件/路径/进程H.Extensions.AppPath应用路径服务H.Extensions.OpenFolderDialog文件对话框H.Extensions.Zip压缩解压H.Extensions.Process进程管理UI/视觉H.Extensions.Animations动画效果H.Extensions.StoryBoard故事板H.Extensions.Color颜色处理H.Extensions.Geometry几何图形H.Extensions.FontIcon字体图标业务支持H.Extensions.ExcelExcel 操作H.Extensions.Encryption加密解密H.Extensions.Mail邮件发送H.Extensions.HttpHTTP 请求H.Extensions.Validation数据验证H.Extensions.Revertible撤销重做三、核心扩展库详解3.1 H.Extensions.Common - 通用扩展这是最常用的扩展库包含大量基础工具方法。文件操作扩展// 判断文件类型stringfilePathimage.jpg;boolisImagefilePath.IsImage();// trueboolisVideofilePath.IsVedio();// falseboolisAudiofilePath.IsAudio();// false// 获取目录中的文件stringfolderC:\Images;IEnumerablestringimagesfolder.GetAllImages();// 获取所有图片// 文件大小显示stringsizefilePath.ToFileEx().GetFileSizeToDisplay();// 2.50MBDirectoryEx 增强类// 创建目录不存在时folder.ToDirectoryEx().CreateDirectoryIfNotExsit();// 备份目录folder.ToDirectoryEx().BackupToDirectory(C:\Backup,logConsole.WriteLine(log));// 获取所有文件带过滤Liststringfilesfolder.ToDirectoryEx().GetAllFiles(filefile.Size1024,// 文件过滤条件dir!dir.Name.StartsWith(.)// 目录过滤条件);路径操作扩展stringpathC:\Users\Admin\Documents\file.txt;// 获取路径信息stringfileNamepath.GetFileName();// file.txtstringnameWithoutExtpath.GetFileNameWithoutExtension();// filestringdirectorypath.GetDirectoryName();// C:\Users\Admin\Documentsstringextensionpath.GetExtension();// .txt// 获取相对路径stringrelativepath.GetRelativePath(C:\Users\Admin);// Documents\file.txt3.2 H.Extensions.Command - 命令扩展提供各种预定义命令简化命令创建。MessageCommand带状态反馈的命令publicclassMyViewModel:BindableBase{publicICommandProcessCommand{get;}publicMyViewModel(){ProcessCommandnewMessageCommand((command,parameter){// 执行耗时操作Thread.Sleep(3000);// 命令会自动设置 Message 和 IsBuzycommand.Message处理完成;});}}命令特性IsBuzy- 是否正在执行Message- 当前状态消息Exception- 异常信息如果有3.3 H.Extensions.Color - 颜色扩展提供颜色转换和处理功能。// 十六进制转颜色stringhex#FF5733;System.Windows.Media.Colorcolorhex.ToHexColorEx().ToColor();// 颜色工厂ColorFactoryfactorynewColorFactory();ListColorcolorsfactory.GetStandardColors();// 获取标准颜色3.4 H.Extensions.Encryption - 加密扩展提供加密解密服务。// 注册服务services.AddDESCryptService();// 使用服务ICryptServicecryptServiceIoc.GetServiceICryptService();stringencryptedcryptService.Encrypt(secret data);stringdecryptedcryptService.Decrypt(encrypted);3.5 H.Extensions.Animations - 动画扩展提供过渡动画效果。// 创建动画TransitionablestransitionnewTransitionables();// 透明度动画OpacityTransitionableopacitynewOpacityTransitionable();opacity.From0;opacity.To1;opacity.DurationTimeSpan.FromSeconds(0.5);// 缩放动画ScaleTransitionablescalenewScaleTransitionable();scale.FromnewPoint(0.5,0.5);scale.TonewPoint(1,1);// 应用到元素myElement.SetTransitionable(transition);四、扩展库使用模式4.1 静态方法调用// 文件操作string[]filesC:\\MyFolder.GetFiles();// 路径操作stringfileNamepath.GetFileName();// 颜色转换Colorcolor#FF0000.ToHexColorEx().ToColor();4.2 服务注册模式// 在 ConfigureServices 中注册protectedoverridevoidConfigureServices(IServiceCollectionservices){// 注册加密服务services.AddDESCryptService();// 注册应用路径服务services.AddAppPathService();// 注册验证服务services.AddValidationService();}4.3 命令绑定模式// 在 ViewModel 中定义命令publicICommandMyCommand{get;}publicMyViewModel(){MyCommandnewMessageCommand((cmd,param){// 执行逻辑});}!-- 在 XAML 中绑定 --ButtonCommand{Binding MyCommand}Content执行/五、实际应用案例5.1 案例一文件管理publicasyncTaskProcessFilesAsync(stringfolderPath){// 获取所有图片varimagesfolderPath.GetAllImages();foreach(stringimagePathinimages){// 获取文件信息FileExfileEximagePath.ToFileEx();stringfileNameimagePath.GetFileName();stringsizefileEx.GetFileSizeToDisplay();// 处理文件awaitProcessImageAsync(imagePath);}}5.2 案例二数据加密存储publicclassSecureSettingsService{privatereadonlyICryptService_cryptService;publicSecureSettingsService(ICryptServicecryptService){_cryptServicecryptService;}publicvoidSaveSecureData(stringkey,stringdata){stringencrypted_cryptService.Encrypt(data);Properties.Settings.Default[key]encrypted;Properties.Settings.Default.Save();}publicstringLoadSecureData(stringkey){stringencryptedProperties.Settings.Default[key]asstring;return_cryptService.Decrypt(encrypted);}}5.3 案例三带状态的异步命令publicclassDataImportViewModel:BindableBase{privatestring_status;publicstringStatus{get_status;set{_statusvalue;RaisePropertyChanged();}}privatebool_isBusy;publicboolIsBusy{get_isBusy;set{_isBusyvalue;RaisePropertyChanged();}}publicICommandImportCommand{get;}publicDataImportViewModel(){ImportCommandnewMessageCommand(async(cmd,param){Status正在导入...;try{// 执行导入操作awaitImportDataAsync();Status导入成功;}catch(Exceptionex){Status$导入失败:{ex.Message};}});}privateasyncTaskImportDataAsync(){// 模拟耗时操作awaitTask.Delay(3000);}}六、扩展库查找技巧6.1 快速定位入口文件Source/Extensions/ ├── H.Extensions.Common/ │ ├── Extension.File.cs # 文件操作入口 │ ├── Extension.Path.cs # 路径操作入口 │ └── Extension.Object.cs # 对象操作入口 ├── H.Extensions.Command/ │ └── Command.Message.cs # 消息命令入口 ├── H.Extensions.Color/ │ └── Extesion.Color.cs # 颜色操作入口 └── H.Extensions.Encryption/ └── Extention.cs # 加密服务入口6.2 命名约定文件命名说明Extension.*.cs静态扩展方法Extention.*.cs服务注册扩展Command.*.cs命令定义*Service.cs服务实现七、最佳实践7.1 使用扩展方法// ✅ 推荐使用扩展方法stringfileNamepath.GetFileName();// ❌ 不推荐直接调用静态方法stringfileNamePath.GetFileName(path);7.2 服务注册// ✅ 推荐使用扩展方法注册services.AddDESCryptService();// ❌ 不推荐手动注册services.AddSingletonICryptService,DESCryptService();7.3 命令使用// ✅ 推荐使用预定义命令ICommandcommandnewMessageCommand(ExecuteLogic);// ✅ 推荐绑定到 UIButtonCommand{Binding MyCommand}/八、总结Extensions 扩展库是 WPF-Control 的工具集合提供了丰富的实用方法Common文件、路径、对象等基础操作Command各种预定义命令Color颜色处理Encryption加密服务Animations动画效果使用扩展库的核心要点优先查找Extension.cs或Extention.cs文件使用扩展方法简化代码通过AddXXX模式注册服务结合 IOC 容器使用服务掌握这些扩展库可以大大提高开发效率减少重复代码。