WPF修改MessageBox样式(.NET6版本)

news/2024/10/4 7:26:30

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

MISC——攻防世界

pdf 下载附件,一个PDF文件,打开,中间有一个框框,点一下,看见flag:flag{security_through_obscurity} 如来十三掌 下载附件: 夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤…

FreeRTOS简单内核实现4 临界段

本文内容较为简单,主要介绍如何实现临界段以及临界段如何使用@目录0、思考与回答0.1、思考一0.2、思考二0.3、思考三1、关中断1.1、带返回值1.2、不带返回值2、开中断3、临界段4、应用0、思考与回答 0.1、思考一 为什么需要临界段? 有时候我们需要部分代码一旦这开始执行,则…

第一章 进制,寄存器,汇编指令(公开课)

一、进制1、十进制:由0.1.2.3.4.5.6.7.8.9组成,逢十进一2、二进制:由0.1组成,逢二进一eg:0--01--12--103--114--1005--1016--1103、十六进制:由0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F组成,逢十六进一4、八进制eg:2-3=? 二、exe程序 1、PE文件结构:任何一个在Windows上运行的…

洛谷 P1216 数字三角形

题目链接:数字三角形思路dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7 -> 3 -> 8 -> 2 -> 4,这些数字中的每一个(除起点7外)都只能从上一层的最左侧数字到达,递推公式为dp[i][1] = max(dp[i][1], num[i][1] + dp[i - …

Qt/C++音视频开发77-获取本地有哪些摄像头名称/ffmpeg命令日志方式

一、前言 上一篇文章讲使用ffmpeg函数接口去获取本地摄像头信息,这种方式只能从ffmpeg5版本开始才具备,那ffmpeg3/4只能干瞪眼?那肯定不行的,必须要想办法打通这个功能,查阅信息发现可以执行命令 ffmpeg -f dshow -list_devices true -i dummy 去获取,会通过日志打印出来…

ants:强大的高性能与低成本 Go 协程池

ants:强大的高性能与低成本 Go 协程池 原创 K8sCat 源自开发者 2024-06-16 11:28 广东 听全文源自开发者 专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。 256篇原创内容公众号在开发高并发程序时,管理并发的能力至关重要。在…

app专项测试

过滤: 过滤表达式: domain. 展示 domain 中的资源, *.comhas-response-header. 包含指定 HTTP 响应 headeris. 表达式larger-than. 展示大于某个尺寸的资源,1000 等于 1kmethod. 指定http请求方法,比如 get 或者 postmime-type. 资源 mime 类型,比如 application/jsonsch…

goland的启动配置

参考:https://www.cnblogs.com/laijinquan/p/11968410.html 纯记录,如图