17.WPF Application介紹

摘要

WPF和WinForm 很相似, WPF與WinForm一樣有一個 Application對象來進行一些全局的行爲和操作,並且每個 Domain (應用程序域)中僅且只有一個 Application 實例存在。和 WinForm 不同的是WPF Application默認由兩部分組成 : App.xaml 和 App.xaml.cs,這有點類似于 Asp.Net WebForm,將定義和行爲代碼相分離。

微軟把WPF中經常使用的功能都封裝在 Application 類中了。 Application 類具體有以下功能:

  • 跟蹤應用程序的生存期並與之交互。
  • 檢索和處理命令行參數。
  • 檢測和響應未經處理的異常。
  • 共享應用程序範圍的屬性和資源。
  • 管理獨立應用程序中的窗口。
  • 跟蹤和管理導航。

正文

App.xml

<Application x:Class="_17.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:_17" StartupUri="MainWindow.xaml"> <Application.Resources> </Application.Resources></Application>

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 默認命名空間

StartupUri="MainWindow.xaml" 啓動窗口

<Application.Resources>系統資源定義

像Winform一樣啓動

17.WPF Application介紹

WPF應用程序的關閉 WPF應用程序的關閉只有在應用程序的 Shutdown 方法被調用時,應用程序才停止運行。 ShutDown 是隱式或顯式發生,可以通過指定 ShutdownMode 的屬性值來進行設置。

ShutdownMode選項

  • OnLastWindowClose(默認值): 應用程序關閉時,或最後一個窗口關閉時關閉,或調用Application對象的Shutdown() 方法時,應用程序關閉。
  • OnMainWindowClose 啓動窗體關閉或調用Application對象的Shutdown()方法時,應用程序關閉。(和C#的Windows應用程序的關閉模式比較類似)
  • OnExplicitShutdown 只有在調用Application對象的Shutdown()方法時,應用程序才會關閉。

Application類中與應用程序生存期相關的事件

17.WPF Application介紹

Application類的屬性

17.WPF Application介紹

App事件

public partial class App : Application{ protected override void OnExit(ExitEventArgs e) { MessageBox.Show("exit"); } protected override void OnSessionEnding(SessionEndingCancelEventArgs e) { e.Cancel = true; MessageBox.Show("不想關閉"); }}

帶參數啓動

protected override void OnStartup(StartupEventArgs e){ if (e.Args.Length > 0) { MessageBox.Show(e.Args[0]); } base.OnStartup(e);}

開屏圖設置

添加圖片到項目

17.WPF Application介紹

窗口通訊

MainWindow.xaml

<StackPanel> <Button Content="Show Message" Margin="10" Padding="10" Name="btn1" Click="btn1_Click"></Button></StackPanel>public string Msg = "";private void Window_Loaded(object sender, RoutedEventArgs e){ this.Title = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Window1 win=new Window1(); win.Show(); Window2 win2 = new Window2(); win2.Show();}private void btn1_Click(object sender, RoutedEventArgs e){ Msg = "hello world"; MessageBox.Show(Application.Current.MainWindow.Title);}

Window1.xaml

<StackPanel> <Button Content="Show Message" Margin="10" Padding="10" Name="btn1" Click="btn1_Click"></Button></StackPanel>public string Window1Msg = "";public Window1(){ InitializeComponent(); Window1Msg = "Window1 Message";}private void btn1_Click(object sender, RoutedEventArgs e){ MessageBox.Show(Application.Current.MainWindow.Title+"|" + ((MainWindow)Application.Current.MainWindow).Msg);}

Application.Current.MainWindow 取得默認主窗口

Window2.xaml

<StackPanel> <Button Content="Show Message" Margin="10" Padding="10" Name="btn1" Click="btn1_Click"></Button></StackPanel>private void btn1_Click(object sender, RoutedEventArgs e){ foreach (Window item in Application.Current.Windows) { if(item.Title=="Window1") { MessageBox.Show(((Window1)item).Window1Msg); } }}

17.WPF Application介紹