示例:WPF中如何在主窗口显示之前增加一个登录窗口

一、目的:开发过程中,经常需要先显示一个登录窗口,当登录成功时显示主窗口,那么如何设置登录窗口显示的时机和顺序,本文介绍我常用的方式

二、实现

cs 复制代码
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            MainWindow mainWindow = new MainWindow();
            LoginWindow loginWindow = new LoginWindow();
            var r = loginWindow.ShowDialog();
            if (r != true)
            {
                this.Shutdown();
                return;
            }
            mainWindow.Show();
        }
    }

在App里面重写OnStartup方法,注意这里要先 MainWindow mainWindow = new MainWindow();,之后去显示登录窗口,其中的原因可能是App默认的ShutDownMode是OnLastWindowClose,如果不将MainWindow在之前new出来,当登录窗口关闭时就会触发OnLastWindowClose从而程序退出,OnMainWindowClose模式也是如此。

除此之外注意把App.xaml中StarupUri去掉,否者登录后会显示两个窗口

三、环境

VS2022

四、示例

五、需要了解的知识点

Application 类 (System.Windows) | Microsoft Learn

Application.ShutdownMode 属性 (System.Windows) | Microsoft Learn

Window 类 (System.Windows) | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关推荐
上海物联网14 小时前
Prism WPF中的自定义区域适配器解决了什么问题?在项目中怎么实现一个自定义适配器
wpf
code bean15 小时前
【C#高级】TCP请求-应答模式的WPF应用实战
tcp/ip·c#·wpf
极客智造15 小时前
WPF 实现可复用晶圆 n*n 网格自定义控件(支持选中与圆形裁剪)
wpf
上海物联网2 天前
Prism Regions-自定义区域适配器实现开发者将任意 WPF 控件转换为可动态加载视图的区域容器
面试·wpf
Aevget2 天前
DevExpress WPF中文教程:Data Grid - 如何绑定到有限制的自定义服务(四)?
wpf·界面控件·devexpress·ui开发·.net 10
棉晗榜3 天前
wpf DataGrid控制列是否显示,DataGrid列不会触发Visibility的转换器
wpf
超级种码3 天前
Redis:Redis高可用——副本、哨兵和集群
数据库·redis·wpf
棉晗榜3 天前
wpf给Border添加闪烁边框
wpf
Derrick_itRose3 天前
DevExpress笔记WPF(2)Data Editors and Controls(基础编辑器)
笔记·编辑器·wpf
He BianGu3 天前
【笔记】WPF的Binding中AsyncState的使用方式
笔记·wpf