WPF启动窗体的三种方式
启动窗体的三种方式:
1. StartupUri=“MainWindow.xaml”,比Application_Startup执行的晚。推荐方案
在App.xaml文件中
<Applicationx:Class="Wpf启动窗体三种方式.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:Wpf启动窗体三种方式"StartupUri="MainWindow.xaml"><Application.Resources><!-- 应用程序资源 --></Application.Resources>
</Application>
2. Application_Startup事件,可以在启动某个窗体时,携带参数。推荐方案
在App.xaml文件中
<Applicationx:Class="Wpf启动窗体三种方式.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:Wpf启动窗体三种方式"Startup="Application_Startup"><Application.Resources><!-- 应用程序资源 --></Application.Resources>
</Application>
在App.xaml.cs
public partial class App : Application
{private void Application_Startup(object sender, StartupEventArgs e){MainWindow mainWindow = new MainWindow();//mainWindow.Show();mainWindow.ShowDialog();}
}
3. 自定义Main方法,不建议。会造成Startup事件和StartupUri属性无效,控件权完全交给开发者。没必要的。
// App中定义一个Main方法,WPF默认也提供一个Main方法(在App.g.i.cs这个文件中)。但Main入口方法有且只有一个。所以报错。解决:去掉一个Main。
// 通过测试发现XXX.g.i.cs(在obj->Debug中可以看见该文件)这样文件不能改动,重新编译后,WPF会重新生成。改动的地方还原了。造成修改无效。
// 需要:
// 1。把App.xaml生成操作选择“无”,即编译App.xaml时不让它产生Main方法。开发者才能自定义Main方法。// 2。添加特性 [STAThread],原因:WPF中的控件运行需要一个线程安全的环境。
[STAThread]
public static void Main(string[] args)
{// 实例化一个窗体MainWindow main = new MainWindow();LoginWindow login = new LoginWindow();if(login.ShowDialog() == true){// 实例化一个应用程序Application app = new Application();// 应用程序运行时启动第一个窗体app.Run(main);}
}