Extensions 扩展库
12. Extensions 扩展库
位置:Source/Extensions
分类速查:
| 类型 | 项目示例 |
|---|---|
| 应用/MVVM | H.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.Process |
| UI/视觉 | 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 分类总览
| 类型 | 项目示例 | 功能说明 |
|---|---|---|
| 应用/MVVM | H.Extensions.ApplicationBase | 应用启动基座 |
H.Extensions.Mvvm | MVVM 辅助方法 | |
H.Extensions.Command | 命令扩展 | |
H.Extensions.Behvaiors | 行为扩展 | |
| 数据/序列化 | H.Extensions.DataBase | 数据库基础 |
H.Extensions.DataBase.Repository | 仓储模式 | |
H.Extensions.XmlSerialize | XML 序列化 | |
H.Extensions.NewtonsoftJson | JSON 序列化 | |
| 文件/路径/进程 | 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.Excel | Excel 操作 |
H.Extensions.Encryption | 加密解密 | |
H.Extensions.Mail | 邮件发送 | |
H.Extensions.Http | HTTP 请求 | |
H.Extensions.Validation | 数据验证 | |
H.Extensions.Revertible | 撤销重做 |
三、核心扩展库详解
3.1 H.Extensions.Common - 通用扩展
这是最常用的扩展库,包含大量基础工具方法。
文件操作扩展
// 判断文件类型stringfilePath="image.jpg";boolisImage=filePath.IsImage();// trueboolisVideo=filePath.IsVedio();// falseboolisAudio=filePath.IsAudio();// false// 获取目录中的文件stringfolder=@"C:\Images";IEnumerable<string>images=folder.GetAllImages();// 获取所有图片// 文件大小显示stringsize=filePath.ToFileEx().GetFileSizeToDisplay();// "2.50MB"DirectoryEx 增强类:
// 创建目录(不存在时)folder.ToDirectoryEx().CreateDirectoryIfNotExsit();// 备份目录folder.ToDirectoryEx().BackupToDirectory(@"C:\Backup",log=>Console.WriteLine(log));// 获取所有文件(带过滤)List<string>files=folder.ToDirectoryEx().GetAllFiles(file=>file.Size>1024,// 文件过滤条件dir=>!dir.Name.StartsWith(".")// 目录过滤条件);路径操作扩展
stringpath=@"C:\Users\Admin\Documents\file.txt";// 获取路径信息stringfileName=path.GetFileName();// "file.txt"stringnameWithoutExt=path.GetFileNameWithoutExtension();// "file"stringdirectory=path.GetDirectoryName();// "C:\Users\Admin\Documents"stringextension=path.GetExtension();// ".txt"// 获取相对路径stringrelative=path.GetRelativePath(@"C:\Users\Admin");// "Documents\file.txt"3.2 H.Extensions.Command - 命令扩展
提供各种预定义命令,简化命令创建。
MessageCommand:带状态反馈的命令
publicclassMyViewModel:BindableBase{publicICommandProcessCommand{get;}publicMyViewModel(){ProcessCommand=newMessageCommand((command,parameter)=>{// 执行耗时操作Thread.Sleep(3000);// 命令会自动设置 Message 和 IsBuzycommand.Message="处理完成";});}}命令特性:
IsBuzy- 是否正在执行Message- 当前状态消息Exception- 异常信息(如果有)
3.3 H.Extensions.Color - 颜色扩展
提供颜色转换和处理功能。
// 十六进制转颜色stringhex="#FF5733";System.Windows.Media.Colorcolor=hex.ToHexColorEx().ToColor();// 颜色工厂ColorFactoryfactory=newColorFactory();List<Color>colors=factory.GetStandardColors();// 获取标准颜色3.4 H.Extensions.Encryption - 加密扩展
提供加密解密服务。
// 注册服务services.AddDESCryptService();// 使用服务ICryptServicecryptService=Ioc.GetService<ICryptService>();stringencrypted=cryptService.Encrypt("secret data");stringdecrypted=cryptService.Decrypt(encrypted);3.5 H.Extensions.Animations - 动画扩展
提供过渡动画效果。
// 创建动画Transitionablestransition=newTransitionables();// 透明度动画OpacityTransitionableopacity=newOpacityTransitionable();opacity.From=0;opacity.To=1;opacity.Duration=TimeSpan.FromSeconds(0.5);// 缩放动画ScaleTransitionablescale=newScaleTransitionable();scale.From=newPoint(0.5,0.5);scale.To=newPoint(1,1);// 应用到元素myElement.SetTransitionable(transition);四、扩展库使用模式
4.1 静态方法调用
// 文件操作string[]files="C:\\MyFolder".GetFiles();// 路径操作stringfileName=path.GetFileName();// 颜色转换Colorcolor="#FF0000".ToHexColorEx().ToColor();4.2 服务注册模式
// 在 ConfigureServices 中注册protectedoverridevoidConfigureServices(IServiceCollectionservices){// 注册加密服务services.AddDESCryptService();// 注册应用路径服务services.AddAppPathService();// 注册验证服务services.AddValidationService();}4.3 命令绑定模式
// 在 ViewModel 中定义命令publicICommandMyCommand{get;}publicMyViewModel(){MyCommand=newMessageCommand((cmd,param)=>{// 执行逻辑});}<!-- 在 XAML 中绑定 --><ButtonCommand="{Binding MyCommand}"Content="执行"/>五、实际应用案例
5.1 案例一:文件管理
publicasyncTaskProcessFilesAsync(stringfolderPath){// 获取所有图片varimages=folderPath.GetAllImages();foreach(stringimagePathinimages){// 获取文件信息FileExfileEx=imagePath.ToFileEx();stringfileName=imagePath.GetFileName();stringsize=fileEx.GetFileSizeToDisplay();// 处理文件awaitProcessImageAsync(imagePath);}}5.2 案例二:数据加密存储
publicclassSecureSettingsService{privatereadonlyICryptService_cryptService;publicSecureSettingsService(ICryptServicecryptService){_cryptService=cryptService;}publicvoidSaveSecureData(stringkey,stringdata){stringencrypted=_cryptService.Encrypt(data);Properties.Settings.Default[key]=encrypted;Properties.Settings.Default.Save();}publicstringLoadSecureData(stringkey){stringencrypted=Properties.Settings.Default[key]asstring;return_cryptService.Decrypt(encrypted);}}5.3 案例三:带状态的异步命令
publicclassDataImportViewModel:BindableBase{privatestring_status;publicstringStatus{get=>_status;set{_status=value;RaisePropertyChanged();}}privatebool_isBusy;publicboolIsBusy{get=>_isBusy;set{_isBusy=value;RaisePropertyChanged();}}publicICommandImportCommand{get;}publicDataImportViewModel(){ImportCommand=newMessageCommand(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 使用扩展方法
// ✅ 推荐:使用扩展方法stringfileName=path.GetFileName();// ❌ 不推荐:直接调用静态方法stringfileName=Path.GetFileName(path);7.2 服务注册
// ✅ 推荐:使用扩展方法注册services.AddDESCryptService();// ❌ 不推荐:手动注册services.AddSingleton<ICryptService,DESCryptService>();7.3 命令使用
// ✅ 推荐:使用预定义命令ICommandcommand=newMessageCommand(ExecuteLogic);// ✅ 推荐:绑定到 UI<ButtonCommand="{Binding MyCommand}"/>八、总结
Extensions 扩展库是 WPF-Control 的工具集合,提供了丰富的实用方法:
- Common:文件、路径、对象等基础操作
- Command:各种预定义命令
- Color:颜色处理
- Encryption:加密服务
- Animations:动画效果
使用扩展库的核心要点:
- 优先查找
Extension.cs或Extention.cs文件 - 使用扩展方法简化代码
- 通过
AddXXX模式注册服务 - 结合 IOC 容器使用服务
掌握这些扩展库,可以大大提高开发效率,减少重复代码。
