男人直接做的视频网站,比较好的装修公司,天水网站建设公司排名,wordpress系统教程 pdf一、问题场景
使用HandyControl简写HC 作为基础UI组件库时#xff0c;希望系统中所有的MessageBox 样式都使用HC的MessageBox#xff0c;常规操作如下#xff1a; 在对应的xxxx.cs 顶部使用using 指定特定类的命名空间。
using MessageBox HandyControl.Controls.Message…
一、问题场景
使用HandyControl简写HC 作为基础UI组件库时希望系统中所有的MessageBox 样式都使用HC的MessageBox常规操作如下 在对应的xxxx.cs 顶部使用using 指定特定类的命名空间。
using MessageBox HandyControl.Controls.MessageBox;这样当前页面对应的MessageBox 就都是对应指定类型的控件实例。这样做虽然能够解决样式问题弊端也比较明显如果项目页面较多交互复杂度高一些需要修改的页面工作量也就大了。粘贴复制粘贴复制也是需要时间和成本的。以前的一种解决方式是通过获取原生MessageBox句柄(钩子)方式对样式进行替换实现全局的处理。
二、解决方案
在NET6时引入了全局GlobalUsings用于实现程序集项目中对目标库的全局声明和引用。 需要对项目文件进行启用ImplicitUsingsenable/ImplicitUsings配置如下
Project SdkMicrosoft.NET.Sdk
!--省略配置内容--PropertyGroup!--省略配置内容--UseWPFtrue/UseWPFImplicitUsingsenable/ImplicitUsings/PropertyGroupItemGroup!--引入UI库Nuget依赖--PackageReference IncludeHandyControl Version3.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();}
}程序效果如下 弹框效果