当前位置: 首页 > news >正文

H.Test.DefaultApplicationBase-默认应用组合

H.Test.DefaultApplicationBase 示例项目学习教程

一、概述

H.Test.DefaultApplicationBase展示了如何使用 WPF-Control 框架的默认应用组合(Default ApplicationBase)。这是一个"开箱即用"的应用模板,一键注册所有常用服务和模块。

核心价值:通过AddApplicationServices()一行代码注册所有默认服务,快速搭建功能完整的应用框架。


二、项目结构

H.Test.DefaultApplicationBase/ ├── App.xaml # 应用入口(XAML) ├── App.xaml.cs # 应用入口(代码) ├── MainWindow.xaml # 主窗口(XAML) ├── MainWindow.xaml.cs # 主窗口代码 └── H.Test.DefaultApplicationBase.csproj

三、核心文件解析

3.1 App.xaml

<ApplicationBasex:Class="H.Test.DefaultApplicationBase.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:H.Test.DefaultApplicationBase"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><!-- 注释掉的手动配置,因为使用默认组合会自动加载 --><!--<FontSizeTheme Type="{x:Static FontSizeThemeType.Default}" /> <LayoutTheme Type="{x:Static LayoutThemeType.Default}" /> <ColorTheme Type="{x:Static ColorThemeType.Dark}" />--><!--<DefaultStyle />--></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources></ApplicationBase>

关键点

  • 继承ApplicationBase
  • 资源字典中的配置被注释掉,因为默认应用组合会自动加载

3.2 App.xaml.cs(核心)

publicpartialclassApp:ApplicationBase{protectedoverridevoidConfigureServices(IServiceCollectionservices){base.ConfigureServices(services);// 一键注册所有默认服务services.AddApplicationServices(x=>{// 配置模块选项x.UseModulesOptions(x=>{x.UseAboutOptions(x=>x.ProductName="Test");x.UseSplashScreenOptions(x=>x.Product="TTTTT");});// 配置主题选项x.UseThemeModuleOptions(x=>{x.UseThemeOptions(x=>{x.FontSize=FontSizeThemeType.Large;});});});}protectedoverridevoidConfigure(IApplicationBuilderapp){base.Configure(app);// 启用应用配置app.UseApplicationOptions();}protectedoverrideWindowCreateMainWindow(StartupEventArgse){returnnewMainWindow();}}

三大核心步骤

  1. AddApplicationServices- 注册所有默认服务
  2. Lambda 配置- 自定义模块和主题选项
  3. UseApplicationOptions- 启用应用配置

3.3 MainWindow.xaml

<Windowx:Class="H.Test.DefaultApplicationBase.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow"Width="800"Height="450"Style="{DynamicResource{x:Static WindowKeys.Default}}"><DockPanel><!-- 顶部菜单 --><MenuDockPanel.Dock="Top"><Menu.Resources><StyleBasedOn="{StaticResource {x:Static MenuItemKeys.BindCommand}}"TargetType="MenuItem"/></Menu.Resources><MenuItemHeader="帮助"><MenuItemCommand="{ShowGuideCommand}"/><MenuItemCommand="{ShowAboutCommand}"/><MenuItemCommand="{ShowSettingCommand}"/><!-- 更多菜单项... --></MenuItem></Menu><!-- 主内容区 --><TabControl><TabControl.Resources><StyleBasedOn="{StaticResource {x:Static ButtonKeys.Command}}"TargetType="Button"/></TabControl.Resources><!-- Messages 标签页 --><TabItemHeader="Messages"><UniformGrid><ButtonCommand="{ShowMessageCommand}"/><ButtonCommand="{ShowWaitCommand}"/><ButtonCommand="{ShowPercentCommand}"/><ButtonCommand="{ShowInfoNoticeMessageCommand Message=我是 Info 消息}"/><ButtonCommand="{ShowErrorNoticeMessageCommand Message=我是 Error 消息}"/><ButtonCommand="{ShowSuccessNoticeMessageCommand Message=我是 Success 消息}"/><!-- 更多消息按钮... --></UniformGrid></TabItem><!-- Modules 标签页 --><TabItemHeader="Modules"><UniformGrid><ButtonCommand="{ShowAboutCommand}"/><ButtonCommand="{ShowSettingCommand}"/><ButtonCommand="{ShowFeedbackCommand}"/><!-- 更多模块按钮... --></UniformGrid></TabItem><!-- Services 标签页 --><TabItemHeader="Services"><UniformGrid><ButtonCommand="{ShowLog4netPathCommand}"/></UniformGrid></TabItem></TabControl></DockPanel></Window>

四、默认服务详解

4.1 AddApplicationServices 注册的服务

publicstaticvoidAddApplicationServices(thisIServiceCollectionservices,Action<IDefaultApplicationOptions>options=null){DefaultApplicationOptionsopt=newDefaultApplicationOptions();options?.Invoke(opt);// 1. 注册默认消息服务services.AddDefaultMessages();// 2. 注册默认模块服务services.AddDefaultModuleServices(opt.GetConfigOptions<Action<IDefaultModuleOptions>>());// 3. 注册默认主题服务services.AddDefaultThemeServices(opt.GetConfigOptions<Action<IDefaultThemeOptions>>());// 4. 注册日志服务services.AddLog4net();}

4.2 默认消息服务

AddDefaultMessages()注册:

服务功能
AdornerDialogMessage对话框消息
SnackMessage轻提示消息
NoticeMessage通知消息
FormMessage表单消息

4.3 默认模块服务

AddDefaultModuleServices()注册:

模块功能
About关于页面
Feedback反馈模块
Guide新手引导
Help帮助入口
Setting设置页面
Theme主题切换
SplashScreen启动画面
Login登录模块

4.4 默认主题服务

AddDefaultThemeServices()注册:

功能说明
颜色主题浅色、深色、蓝色、紫色等
字体大小小、中、大
布局主题默认布局

五、配置选项详解

5.1 模块配置

x.UseModulesOptions(x=>{// 配置关于页面x.UseAboutOptions(x=>x.ProductName="Test");// 配置启动页x.UseSplashScreenOptions(x=>x.Product="TTTTT");// 配置其他模块...});

5.2 主题配置

x.UseThemeModuleOptions(x=>{x.UseThemeOptions(x=>{// 设置字体大小x.FontSize=FontSizeThemeType.Large;// 添加颜色主题x.ColorResources.Add(newBlueDarkColorResource());x.ColorResources.Add(newBlueLightColorResource());});});

六、命令系统

6.1 消息命令

命令功能
ShowMessageCommand显示对话框
ShowWaitCommand显示等待提示
ShowPercentCommand显示进度百分比
ShowEditCommand显示编辑对话框
ShowInfoNoticeMessageCommand显示 Info 通知
ShowErrorNoticeMessageCommand显示 Error 通知
ShowSuccessNoticeMessageCommand显示 Success 通知
ShowWarnNoticeMessageCommand显示 Warn 通知

6.2 模块命令

命令功能
ShowAboutCommand显示关于页面
ShowSettingCommand显示设置页面
ShowFeedbackCommand显示反馈页面
ShowGuideCommand显示新手引导
ShowWebSiteCommand打开网站
ShowSponsorCommand显示赞助页面

6.3 服务命令

命令功能
ShowLog4netPathCommand显示日志文件路径

七、运行项目

7.1 步骤

1. 打开 Visual Studio 2022 2. 打开解决方案:Solution/WPF-Control.sln 3. 在解决方案资源管理器中找到 H.Test.DefaultApplicationBase 项目 4. 右键点击项目 → 设置为启动项目 5. 按 F5 运行

7.2 预期效果

运行后会看到:

  1. 启动页(如果配置了)
  2. 登录页(如果配置了)
  3. 主窗口
    • 顶部菜单栏包含"帮助"菜单
    • 三个标签页:Messages、Modules、Services
    • 每个标签页有多个按钮,点击可触发相应功能

八、实际应用案例

8.1 最小化配置

publicpartialclassApp:ApplicationBase{protectedoverridevoidConfigureServices(IServiceCollectionservices){base.ConfigureServices(services);// 最简单的一行代码注册所有服务services.AddApplicationServices();}protectedoverridevoidConfigure(IApplicationBuilderapp){base.Configure(app);app.UseApplicationOptions();}protectedoverrideWindowCreateMainWindow(StartupEventArgse){returnnewMainWindow();}}

8.2 自定义配置

publicpartialclassApp:ApplicationBase{protectedoverridevoidConfigureServices(IServiceCollectionservices){base.ConfigureServices(services);services.AddApplicationServices(x=>{// 配置产品信息x.UseModulesOptions(opt=>{opt.UseAboutOptions(o=>{o.ProductName="我的应用";o.Version="1.0.0";o.Description="这是一个示例应用";});opt.UseSplashScreenOptions(o=>{o.Product="我的产品";o.Company="我的公司";o.SleepMicroseconds=2000;// 启动页停留 2 秒});});// 配置主题x.UseThemeModuleOptions(opt=>{opt.UseThemeOptions(o=>{o.FontSize=FontSizeThemeType.Medium;o.ColorResources.Add(newGrayDarkColorResource());o.ColorResources.Add(newGrayLightColorResource());});});});}protectedoverridevoidConfigure(IApplicationBuilderapp){base.Configure(app);app.UseApplicationOptions();}}

8.3 添加自定义服务

publicpartialclassApp:ApplicationBase{protectedoverridevoidConfigureServices(IServiceCollectionservices){base.ConfigureServices(services);// 注册默认服务services.AddApplicationServices(x=>{// 配置选项...});// 添加自定义服务services.AddSingleton<IDataService,DataService>();services.AddTransient<IMainViewModel,MainViewModel>();}}

九、对比学习

9.1 与 H.Test.ApplicationBase 对比

特性ApplicationBaseDefaultApplicationBase
服务注册手动逐个注册一键批量注册
配置复杂度
灵活性中等
适用场景高度定制快速开发

9.2 代码对比

ApplicationBase

services.AddAdornerDialogMessage();services.AddSnackMessage();services.AddSetting();services.AddTheme();services.AddAbout();services.AddHelp();// ... 需要注册很多服务

DefaultApplicationBase

services.AddApplicationServices(x=>{x.UseModulesOptions(x=>{x.UseAboutOptions(x=>x.ProductName="Test");});});

十、常见问题

10.1 服务未注册

问题:某些服务获取失败。

解决

1. 确保调用了 AddApplicationServices() 2. 检查配置选项是否正确 3. 确认 UseApplicationOptions() 已调用

10.2 样式不显示

问题:界面没有应用样式。

解决

1. 确保 UseApplicationOptions() 已调用 2. 检查是否注释掉了手动资源加载 3. 确认主题服务已注册

10.3 命令不执行

问题:按钮点击后命令不执行。

解决

1. 确保命令已注册到 IOC 容器 2. 检查命令绑定语法是否正确 3. 确认使用了正确的命令样式

十一、总结

通过学习H.Test.DefaultApplicationBase,您掌握了:

  1. 一键注册AddApplicationServices()注册所有默认服务
  2. 配置选项:通过 Lambda 表达式自定义模块和主题
  3. 命令系统:使用内置命令快速实现功能
  4. 最佳实践:如何平衡灵活性和开发效率

关键要点

  • 使用AddApplicationServices()简化服务注册
  • 通过 Lambda 配置自定义选项
  • 使用UseApplicationOptions()启用配置
  • 内置命令系统提供快速开发能力

适用场景

  • ✅ 快速原型开发
  • ✅ 标准企业应用
  • ✅ 需要快速上线的项目
  • ❌ 需要高度定制的场景

这是构建 WPF-Control 应用的推荐起点,可以在默认基础上逐步添加自定义功能。

http://www.jsqmd.com/news/883867/

相关文章:

  • 从零开始构建你的AI角色扮演世界:SillyTavern完全指南
  • 高端全屋定制哪家好?2025高端全屋定制选购全指南 - 资讯纵览
  • 终极指南:如何用any-listen打造完全私有的跨平台音乐播放体验
  • 构建多模型智能体时利用Taotoken简化API调用与管理
  • 金融学论文降AI工具免费推荐:2026年金融学毕业论文降AI免费4.8元达标完整方案 - 还在做实验的师兄
  • 从零开始:如何用开源3D模型打造你的专属Cherry MX键帽?
  • 免费解锁网盘限速:3步搞定LinkSwift网盘直链下载助手完整指南
  • 如何用Go语言快速构建智能硬件控制项目:Gobot框架完整入门教程
  • MySQL全局ID生成实战:从自增主键到自定义Sequence的平滑升级方案与避坑指南
  • JavaScript语言精粹第三章解读 | 吃透JS对象核心!告别90%日常开发对象Bug
  • 2026年专升本论文降AI攻略:专升本毕业论文AIGC超标4.8元快速解决完整指南 - 还在做实验的师兄
  • 信息工程论文降AI工具免费推荐:2026年信息工程研究生毕业论文降AI4.8元达标知网完整指南 - 还在做实验的师兄
  • 618洗地机性价比怎么看?一台抵多台才是关键实用选购指南 - Top品牌推荐官
  • 独立开发者如何借助Taotoken的Token Plan套餐优化个人项目预算
  • GalTransl终极指南:3步完成视觉小说AI智能翻译的完整方案
  • 终极指南:如何用ESP32打造专业级蓝牙游戏手柄
  • Outline知识库终极指南:如何构建实时协作的团队知识中枢
  • 2026年合肥GEO优化服务商口碑推荐指南:生成式AI搜索时代的企业增长新基建 - 行业深度观察C
  • 如何用嘎嘎降AI处理金融学论文:金融学毕业论文降AI4.8元完整操作教程 - 还在做实验的师兄
  • CANoe测试效率翻倍:手把手教你用XML Test Module搭建可复用的测试套件
  • 用Python和FDTD仿真,手把手教你理解超表面中的几何相位与传输相位(附代码)
  • AIGC率98%别慌!2026年四招高效去AI痕迹+工具推荐,论文轻松过! - 降AI实验室
  • 3个关键步骤:从零开始使用AlphaFold 3进行蛋白质结构预测
  • ssm服装定制系统(10099)
  • Forge中的资源管理:优化LLM部署的硬件利用策略
  • 解决claude code在ubuntu中总被封号与token不足的痛点
  • June搜索引擎优化(SEO):提升论坛内容收录与排名的实用策略
  • 男士户外运动休闲男鞋排行:5款高适配度单品盘点 - 奔跑123
  • 市场营销论文降AI工具免费推荐:2026年市场营销毕业论文降AI知网4.8元免费99.26%完整方案 - 还在做实验的师兄
  • 嘎嘎降AI和去AIGC哪个更适合理工科论文:2026年理工科毕业论文降AI工具完整横评报告 - 还在做实验的师兄