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

WPF三方UI库全局应用MessageBox样式(.NET6版本)

blog-hbh-hc-header

一、问题场景

使用HandyControl简写HC 作为基础UI组件库时,希望系统中所有的MessageBox 样式都使用HCMessageBox,常规操作如下:
在对应的xxxx.cs 顶部使用using 指定特定类的命名空间。

using MessageBox = HandyControl.Controls.MessageBox;

这样,当前页面对应的MessageBox 就都是对应指定类型的控件实例。这样做虽然能够解决样式问题,弊端也比较明显,如果项目页面较多,交互复杂度高一些,需要修改的页面工作量也就大了。粘贴复制,粘贴复制也是需要时间和成本的。以前的一种解决方式是通过获取原生MessageBox句柄(钩子)方式对样式进行替换实现全局的处理。

二、解决方案

NET6时,引入了全局GlobalUsings,用于实现程序集项目中对目标库的全局声明和引用。
需要对项目文件进行启用<ImplicitUsings>enable</ImplicitUsings>,配置如下:

<Project Sdk="Microsoft.NET.Sdk">
<!--省略配置内容--><PropertyGroup><!--省略配置内容--><UseWPF>true</UseWPF><ImplicitUsings>enable</ImplicitUsings></PropertyGroup><ItemGroup><!--引入UI库Nuget依赖--><PackageReference Include="HandyControl" Version="3.5.1" />
</ItemGroup><!--省略配置内容-->
</Project>

默认情况下启用之后,项目的全局引用会自动在本地生成编译文件,为方便管理,可以创建一个GlobalUsings.cs文件用于全局引用的可控管理,类文件名字实际并无特定要求,只是参考其他项目,这个名字看起来好识别。
而类文件中就是包含的着全局的引用配置,关键字使用global using

global using MessageBox = HandyControl.Controls.MessageBox;

这样编译生成,当前项目能够尽可能少的去添加头部引用。
案例代码ViewAViewModel.cs

public class ViewAViewModel : BindableBase
{public DelegateCommand UrlCommand { get; private set; }public ViewAViewModel(){UrlCommand = new DelegateCommand(GetUrl);}private void GetUrl(){MessageBox.Show("测试成功","消息提示");throw new NotImplementedException();}
}

程序效果如下:
image.png
弹框效果:
image.png

相关文章:

  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA 的幸运游戏(100分) - 三语言AC题解(Python/Java/Cpp)
  • Kubernetes入门-Kubernetes集群构成
  • [数据集][目标检测]胸部解剖检测数据集VOC+YOLO格式100张10类别
  • PSO-xgboost分类模型,粒子群优化xgboost(多输入多分类)-MATLAB实现
  • 4月份最新出品:上海交大动手学大模型教程,快速入门LLM大模型(附课件)
  • springboot集成积木报表,怎么将平台用户信息传递到积木报表
  • 6月19日 Qtday5
  • C语言从头学22——main( )函数
  • 【植物大战僵尸杂交版】致敬传奇游戏玩家——一个普通人的六年坚持
  • 多态性(Java)
  • TCP与UDP案例
  • java如何去除字符串里的空白内容
  • QT信号与槽/窗口组件优化/使用QT制作QQ登录界面
  • JAVAEE认证题库
  • ARM功耗管理框架之LPI
  • 4. 路由到控制器 - Laravel从零开始教程
  • 4个实用的微服务测试策略
  • Cookie 在前端中的实践
  •  D - 粉碎叛乱F - 其他起义
  • ES6系统学习----从Apollo Client看解构赋值
  • Java 最常见的 200+ 面试题:面试必备
  • javascript 哈希表
  • Java编程基础24——递归练习
  • magento2项目上线注意事项
  • mongo索引构建
  • PHP 7 修改了什么呢 -- 2
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • vue 配置sass、scss全局变量
  • vue的全局变量和全局拦截请求器
  • 工作手记之html2canvas使用概述
  • 那些被忽略的 JavaScript 数组方法细节
  • 配置 PM2 实现代码自动发布
  • 前端学习笔记之观察者模式
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 项目实战-Api的解决方案
  • 小试R空间处理新库sf
  • 学习Vue.js的五个小例子
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 用Visual Studio开发以太坊智能合约
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 运行时添加log4j2的appender
  • 正则表达式小结
  • (20)docke容器
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (52)只出现一次的数字III
  • (k8s)kubernetes集群基于Containerd部署
  • (poj1.2.1)1970(筛选法模拟)
  • (二)fiber的基本认识
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (新)网络工程师考点串讲与真题详解
  • (一)为什么要选择C++
  • (自用)仿写程序
  • ***监测系统的构建(chkrootkit )
  • **CentOS7安装Maven**