首页 > 其他分享 >WPF中封装一个自己的MessageBox

WPF中封装一个自己的MessageBox

时间:2024-04-01 09:22:58浏览次数:19  
标签:MessageBox MessageBoxButton 效果 Show MessageBoxImage OKCancel 封装 WPF

前言

    在WPF应用程序开发中,我们可以借助其强大灵活的设计能力打造出绚丽而富有创意的用户界面。然而,与这种高度定制化的界面相比,标准MessageBox却显得有些原始和古老。它的外观与现代、绚丽的应用界面格格不入,使得用户在交互中可能感到突兀或不符合预期。

    本文将深入探讨如何在WPF中封装自定义MessageBox,使其能够融入应用程序整体设计,呈现出与应用界面一致、时尚而个性化的效果。突破了MessageBox的界面限制后,开发者可以为用户提供更一体化、更愉悦的界面交互体验。

 一、需求分析

1.1 适应不同风格

    各种软件界面的风格不尽相同,有的软件可能用第三方UI库,有的软件可能是自己写的UI效果,所以需要考虑以最小的代价适配不同界面风格。

1.2 兼容性设计

     有的软件使用了默认的MessagBox效果,最好是可以实现零修改或少修改达到界面风格替换。

二、实现思路

第一步

    创建一个自己的MessageBox类,找到System.Windows.MessageBox的源代码,将所有Show重载方法拷贝到自己的MessageBox类中备用。

第二步

  创建一个名为CreateWindow的私有静态方法,在方法里获取Application.Current.MainWindow类的父类型,再通过反射创建Window。

第三步

    创建一个用户控件,实现MessageBox.Show()中各种参数下的按钮及图标切换。

第四步

    在第二步创建的CreateWindow方法中调用第三步创建的用户控件,组装成一个完整的Window。

第五步

    在第一步中的Show()方法重载中调用第二步中的CreateWindow方法,通过传参实现各种不同的功能。

三、使用方法

  由于我们使用了与System.Window.MessageBox.Show()完全一样的方法签名,所以使用方法与传统的MessagBox完全一致,甚至在老项目上面替换掉命名空间就可以直接使用,不需要改任何代码。

MessageBox.Show("这是默认效果。");
MessageBox.Show("这是指定标题的效果。", "确认");
MessageBox.Show("这是指定图标的效果(Question)。", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Question);
MessageBox.Show("这是指定图标的效果(Warning)。", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
MessageBox.Show("这是指定图标的效果(Error)。", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Error);
MessageBox.Show("这是指定图标的效果(Information)。", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information);
MessageBox.Show("这是指定按钮的效果(OK)。", "确认", MessageBoxButton.OK);
MessageBox.Show("这是指定按钮的效果(OKCancel)。", "确认", MessageBoxButton.OKCancel);
MessageBox.Show("这是指定按钮的效果(YesNo)。", "确认", MessageBoxButton.YesNo);
MessageBox.Show("这是指定按钮的效果(YesNoCancel)。", "确认", MessageBoxButton.YesNoCancel);
MessageBox.Show("这是指定默认按钮的效果(Yes)。", "确认", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
MessageBox.Show("这是指定默认按钮的效果(No)。", "确认", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
MessageBox.Show("这是指定默认按钮的效果(OK)。", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Error, MessageBoxResult.OK);
MessageBox.Show("这是指定默认按钮的效果(Cancel)。", "确认", MessageBoxButton.OKCancel, MessageBoxImage.Information, MessageBoxResult.Cancel);

四、运行效果

3.1 自定义Window1+MaterialDesign的效果

               

 3.2 自定义Window1+HandyControl的效果

                 

 3.3 自定义Window2+HandyControl

                 

 

标签:MessageBox,MessageBoxButton,效果,Show,MessageBoxImage,OKCancel,封装,WPF
From: https://www.cnblogs.com/qushi2020/p/18107749

相关文章

  • Wpf ComboBoxItem show multi fields
    <Windowx:Class="WpfApp28.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • WPF如何封装一个可扩展的Window
    前言   WPF中Window相信大家都很熟悉,有时我们有一些自定义需求默认Window是无法满足的,比如在标题栏上放一些自己东西,这个时候我们就需要写一个自己的Window,实现起来也很简单,只要给Window设置一个WindowChrome.WindowChrome附加属性就可以实现,WindowChrome可以让你自定义窗口......
  • WPF Yolov 体验
    参考Yolov中文文档yolov8_wpf_example(简单搜索到的一个示例程序)本文源码【下载】环境软件/系统版本说明WindowsWindows10专业版22H219045.4170MicrosoftVisualStudioMicrosoftVisualStudioCommunity2022(64位)-17.6.5Microsoft.NetSD......
  • 一个可以让你有更多时间摸鱼的WPF控件(二)
    前言  上文介绍了如何通过一个Form自定义控件来简化数据的录入,并自动实现数据校验,自动布局排列等功能。本文继续介绍如何优化表格控件的使用,缩减代码量,实现工作效率的提升。一、功能实现   上文中分析了DataGrid跟ListView两种表格控件的优劣,在这里我们选择ListView来实......
  • WPF中继承ItemsControl子类控件数据模板获取选中属性
    需求场景列表类控件,如ListBox、ListView、DataGrid等。显示的行数据中,部分内容依靠选中时触发控制,例如选中行时行记录复选,部分列内容控制显隐。案例源码以ListView为例。Xaml部分<ListViewItemsSource="{BindingMyPropertys}"IsManipulationEnabled="False"><List......
  • python面向对象封装,私有变量
    一、私有变量“_”单下划线开头的变量:_var ,表示这些函数和变量是元素私有的或内部使用的,为非强制性(实际可修改也可引用)。"__"双下划线开头的变量:__var,表示这些函数和变量是元素私有的或内部使用的,为强制性,对象外不可修改或引用。单下划线例子classPeople():def__ini......
  • Vue3+Vite+Axios Request 请求封装(TS版本)最新
    Vue3+Vite+AxiosRequest请求封装(TS版本)http>index.ts请求封装/**@Date:2024-03-3012:37:05*@LastEditors:zhong*@LastEditTime:2024-03-3014:12:52*@FilePath:\app-admin\src\http\index.ts*/importaxios,{AxiosInstance,AxiosRequestCon......
  • WPF中使用PDF模板实现PDF导出和预览-来自GPT4
    在C#和WPF项目中实现加载不同的PDF模板、查看报告和导出PDF文件的功能,可以通过以下步骤完成:1.选择PDF库首先,选择一个合适的.NETPDF库。有许多库可以帮助你处理PDF文件,包括但不限于:iTextSharp:一个功能强大的和灵活的库,适用于创建和修改PDF文件。它是iText的一个.NET端口。......
  • WPF中实现动态表单-来自GPT4的回答
    实现C#和WPF项目中的动态表单功能,需要在后端设计灵活的数据结构来存储表单配置(例如字段名、字段类型等),同时前端需要能够解析这些配置并据此生成相应的控件。以下是一种可能的实现方法:1.数据库设计你的数据库需要至少包含两个表:一个用于存储表单字段的配置,另一个用于存储用户输......
  • Vue组件封装:基于Vue3+wangeditor富文本组件二次封装
    1.简介    开源Web富文本编辑器,开箱即用,配置简单。一个产品的价值,就在于解决用户的问题,提高效率、降低成本、增加稳定性和扩展性。wangEditor不是为了做而做,也不是单纯的模仿谁,而是经过上述问题分析之后,给出一个系统的解决方案。旨在真正去解决用户的问题,产出自己的价......