Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:如何在应用程序窗口之前显示登录窗口(项目导入)?_C#_.net_Wpf_Xaml_Login - Fatal编程技术网

C# WPF:如何在应用程序窗口之前显示登录窗口(项目导入)?

C# WPF:如何在应用程序窗口之前显示登录窗口(项目导入)?,c#,.net,wpf,xaml,login,C#,.net,Wpf,Xaml,Login,我为一个登录WPF应用程序做了一个项目,它基本上执行数据库连接。现在我正在开发一个应用程序(总是在WPF中),它需要这个登录项目来启动。我已将Login.Exe添加到当前项目中的引用中,但我找不到强制使用登录名启动的方法,只能在登录后运行my MainWindow() 我现在正在尝试类似的东西 namespace Administrator { public partial class MainWindow : Window { public MainWindo

我为一个登录WPF应用程序做了一个项目,它基本上执行数据库连接。现在我正在开发一个应用程序(总是在WPF中),它需要这个登录项目来启动。我已将Login.Exe添加到当前项目中的引用中,但我找不到强制使用登录名启动的方法,只能在登录后运行my MainWindow()

我现在正在尝试类似的东西

namespace Administrator
{ 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Window login = new Login.MainWindow();
            login.Show();
        }
    }
}

我的mainwindow.xaml有空内容,这段代码显示了登录表单,但也是一个空白窗口。如何实现我的目标?

您可以通过以下模式实现这一目标

在App.xaml中,将
StartupUri=“MainWindow.xaml”
更改为
Startup=“ApplicationStart”
,并在App.xaml.cs中创建方法ApplicationStart

private void ApplicationStart(object sender, StartupEventArgs e)
{
    Window login = new Login.MainWindow();
    login.Show();

    // Determine if login was successful
    if (login.DataContext is LoginViewModel loginVM)
    {
        if (!loginVM.LoginSuccessful)
        {
            // handle any cleanup and close/shutdown app
        }
    }

    //show your MainWindow
}
我更喜欢这种模式,因为在显示主视图之前,您可以在ApplicationStart中设置DI容器或任何其他您想要的内容。

在App.xaml中设置“关机模式”和“StartupUri”:



“StartupUri”是您的登录表单。

是一个登录窗口,一个
窗口
用户控件
?也是可能的,但在我看来,当您的登录窗口必须打开主窗口时,这不是最干净的编程方式。该逻辑不依赖于登录窗口。这就是为什么我更喜欢ApplicationStart方法(如我的答案所示)。如果您在工作时接受答案,您的欢迎:)会很好。现在,请回答另一个问题。由于我的登录项目是按照MVVM模式开发的,我需要从中获取一个变量,因此使用类似于:VMinstance=login.Datacontext作为ViewModel的内容访问登录VM是否正确?这是一个好问题,有不同的解决方案。也许有更干净的解决方案,但我会像你一样使用ViewModel来获取数据。
   <Application x:Class="MyApp.App"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:MyApp"
                ShutdownMode="OnExplicitShutdown"
                StartupUri="Login.xaml">