C# WPF:如何在应用程序窗口之前显示登录窗口(项目导入)?
我为一个登录WPF应用程序做了一个项目,它基本上执行数据库连接。现在我正在开发一个应用程序(总是在WPF中),它需要这个登录项目来启动。我已将Login.Exe添加到当前项目中的引用中,但我找不到强制使用登录名启动的方法,只能在登录后运行my MainWindow() 我现在正在尝试类似的东西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
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">