学习资料:
《Application = Code + Markup》Charles Petzold著

WPF牛吗?
绝对牛!看三点就知道:
一> Windows Presentation Foundation(WPF)是微软新一代图形系统,基于DirectX 9/10技术的图形向量渲染引擎造就前所未有的3D界面
二> 设计和代码分离
三> c/s和b/s的编程统一(你再不用为c/s编程学WindowForm,b/s编程学WebForm)

在WPF中如何实现传统的先启动登录==>后启动主程序的运行机制呢?可别小看这简单的问题哟...

代码如下:

  1. using System; 
  2. using System.IO; 
  3. using System.Windows; 
  4. using System.Windows.Controls; 
  5. using System.Windows.Input; 
  6. using System.Windows.Media; 
  7. using System.Windows.Media.Imaging; 
  8.   
  9. namespace WpfApp 
  10.     class myApp:Application 
  11.     {           
  12.         [STAThread] 
  13.         public static void Main() 
  14.         { 
  15.             myApp app = new myApp(); 
  16.             //经反复测试得出的结论:这里必须用OnExplicitShutdown强调显式结束应用程序,先启动登录==〉后启动主程序的运行机制才能得以实现 
  17.             app.ShutdownMode = ShutdownMode.OnExplicitShutdown; 
  18.             app.Run(); 
  19.         } 
  20.   
  21.         private void win_Closed(object sender, System.EventArgs e) 
  22.         { 
  23.             Application.Current.Shutdown();   //显式结束应用程序 
  24.         } 
  25.   
  26.         protected override void OnStartup(StartupEventArgs e) 
  27.         {   
  28.             base.OnStartup(e);   
  29.             //MessageBox.Show(e.Args[2]);   //命令行参数 
  30.   
  31.             Window winDlg = new Window1(); 
  32.             winDlg.ShowInTaskbar = false
  33.             winDlg.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
  34.   
  35.             //需要说明的是:WindowsForm中的DialogResult枚举在WPF中已经消失。害我折腾许久,最后在国外网站才找到。。。 
  36.             //bool dlgResult = (bool)winDlg.ShowDialog();   //强类型转换,也行 
  37.             bool? dlgResult = winDlg.ShowDialog();   //注意这里的写法,感觉怪怪。。。 
  38.   
  39.             if (dlgResult.Value ==true
  40.             { 
  41.                 Window winMain = new Window(); 
  42.                 this.MainWindow = winMain; 
  43.                 winMain.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
  44.                 winMain.Closed += new EventHandler(win_Closed); 
  45.                 winMain.Title = "WPF。。。学习。。。哈哈。。。"
  46.   
  47.                 //给主窗体加背景图案,详见Charles Petzold名著《Application = Code + Markup》 
  48.                 //Uri uri = new Uri(@"E:\icons\QT_0605_11\QT_0605_11\ladybug.png"); 
  49.                 Uri uri = new Uri(Environment.GetEnvironmentVariable("windir") + @"\Web\Wallpaper\img24.jpg"); 
  50.                 BitmapImage bmp = new BitmapImage(uri); 
  51.                 Image img = new Image(); 
  52.                 img.Stretch = Stretch.Fill; 
  53.                 img.Source = bmp; 
  54.                 winMain.Content = img; 
  55.   
  56.                 winMain.Show(); 
  57.             } 
  58.             else 
  59.             { 
  60.                 Application.Current.Shutdown();   //显式结束应用程序 
  61.             } 
  62.         } 
  63.     }