官方鏈接:https://msdn.microsoft.com/en-us/library/system.windows.window.statechanged(v=vs.110).aspx
1. Activated獲得焦點事件 和 Deactivated失去焦點的事件:
Activated: 獲得焦點 (首次打開軟件時;由別的軟件切換回當前軟件時;點擊當前軟件在任務欄的按鈕時)
Deactivated:失去焦點,與Activated正好相反,(Deactivated = de + activated)
使用方法有兩種:
第一種是在XAML中聲明,然后在后台書寫執行代碼:
<Window x:Class="WindowsFocusDemo20170117.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" Activated="Window_Activated">
在后台xxx.cs文件中書寫Window_Activated方法:
private void Window_Activated(object sender, EventArgs e) { System.Windows.MessageBox.Show("It is activating..."); }
第二種是都在后台書寫代碼:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.Activated += Window_Activated; } private void Window_Activated(object sender, EventArgs e) { System.Windows.MessageBox.Show("It is activating..."); } }
失去焦點Deactivated是用法與上述一致。
2. 關閉中Closing事件 和 已完全關閉Closed事件
由名字可以看出,Closing事件會比Closed事件早執行,
觸發Closing事件的條件:調用Close()方法;點擊軟件的關閉按鈕;或者使用快捷鍵Alt+F4關閉
注意:
如果窗口存在子窗口,那么調用Close()是不會觸發子窗口的Closing事件的,即子窗口不會關閉;
如果想在關閉時也關閉所有子窗口,請調用Application的Shutdown()方法,用法如下:
Application.Current.Shutdown();//整個應用都關閉了,當然所有窗口都會關閉
Closing事件可以理解為,Window窗體正准備關閉,此時還是可以取消關閉操作的,但Closed事件則是無力回天了;
當用戶退出log off或者關閉電腦,Closing方法也不會觸發,但Application.SessionEnding事件會觸發
3.ContentRendered事件
4.StateChanged事件
窗體狀態改變事件,窗體狀態WindowState是枚舉類型
public enum WindowState { Normal = 0, Minimized = 1, Maximized = 2, }
所以我們可以利用WindowState來判斷窗體的狀態來實現我們的需求
5.LocationChanged事件
6.DpiChanged事件
7.SourceInitialized事件
