如何做到这一点
首先出现登录窗口,如果每件事情都很好,只需关闭登录窗口并打开第二个主窗口。 在win表单中我们修改program.cs但在wpf中没有program.cs。
任何解决方案。?
Actully我在创建的窗口中完成了大部分工作默认情况下,现在想让它成为辅助(意味着它应该出现,然后在想要控制新窗口时关闭)
<Application x:Class="DevnMark_V1._0.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup">
<Application.Resources>
</Application.Resources>
</Application>
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
var login = new MainWindow();
login.ShowDialog();
if (myAppSett.Default.validated == true)
{
var mainWindow = new DevNMarkMainWindow();
mainWindow.ShowDialog();
}
}
登录窗口启动XML
<Window x:Class="DevnMark_V1._0.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:local="clr-namespace:Progress"
Title="MainWindow" Height="292" Width="563" WindowStyle="None" BorderBrush="#FF0A6277" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Topmost="True">
当我关闭登录窗口并在第二个窗口的InitializeComponent();
点发生时,当它被启动时会发生异常
答案 0 :(得分:7)
我用这种方式解决了这个问题:
我从App.xaml中删除了StartupUri="MainWinodw.xaml"
,只留下Startup="Application_Startup"
。
在Application_Startup
中,我立即引用了登录和主窗口:
loginwindow Login = new loginwindow();
mainwindow Main = new mainwindow();
我验证了我的登录信息,然后关闭了登录窗口并用简单的.Show()
打开了主窗口:
Login.ShowDialog();
if (!Login.DialogResult.HasValue || !Login.DialogResult.Value)
{
Application.Current.Shutdown();
}
main.Show();
ShutdownMode
没有变化。
答案 1 :(得分:4)
可能没有program.cs,但默认的WPF程序模板中有一个App.xaml.cs,你可以在那里做同样的事情。
您要做的是从App.xaml中删除 StartupUri="LoginWindow.xaml"
,然后修改App.xaml.cs的构造函数以调用您的登录窗口和主窗口,如下所示:
public App() : base() {
bool authenticated = false;
LoginWindow login;
while (!authenticated)
{
login = new LoginWindow();
login.ShowDialog();
authenticated = ValidUser(login.username, login.password);
}
MainWindow main = new MainWindow(login.username);
main.ShowDialog();
}
上面的示例假设您已将username
和password
添加为LoginWindow的公共属性,并且您已修改MainWindow的构造函数以获取参数。
答案 2 :(得分:0)
建议的OnExplicitShutdown方法有效,您可以避免在第二个窗口中显式关闭应用程序,只需打开ShowDialog后跟this.Shutdown(),所有这些都在App.xaml中,因此不会干扰应用程序的其余部分。