WPF引用路由事件,這些事件用來調用應用程序的元素樹上的各種監聽器上的處理程序。
路由事件主要有三種策略:冒泡、直接、隧道
(1)冒泡,這種事件處理方式是從源元素向上級流過去,直到到達根節點(頁或窗體)
(2)直接,這種處理方式是在源上處理,主要用在setter和trigger
(3)隧道,又稱作 Preview 事件,元素樹的根處調用事件處理程序,依次向下直到源。
隧道事件和冒泡事件一般成對出現。同一對事件,執行時首先是隧道事件,然后冒泡事件。
可以再XAML或者代碼中為控件添加事件,兩者效果是一樣的。
1.在XAML中添加事件
(1)為容器所有button添加事件
<StackPanel Button.Click="PanelButtonClick">
<Button Name="Button1" Width="Auto" >Yes</Button>
<Button Name="Button2" Width="Auto" >No</Button>
</StackPanel>
(2)添加單個對象事件,只對當前元素有效
<Button Name="Button1" Width="Auto" Click="ButtonClick">Yes</Button>
2.在代碼中添加事件
this.Button1.AddHandler(Button.ClickEvent, new RoutedEventHandler(Onb1Click));
void Onb1Click(object sender, RoutedEventArgs e)
{
}
3.WPF窗體生命周期
從APP的run()開始,到加載控件,激活窗體,再到關閉,所經歷的主要事件有下面幾個:
(1)Initialized:當窗口的FrameworkElement底層初始化時觸發,即InitializeComponent方法調用時觸發。
在構造函數之后立刻執行。
(2)LocationChanged:窗口被移動時觸發。
(3)Activated:窗口被激活時觸發。如果顯示窗口之前將ShowActivated 設置為 false,這個將被跳過。
(4)Deactivated:窗口處於非激活時(即其他窗口處於激活時)觸發。
(5)Loaded:顯示窗口之前觸發。
(6)ContentRendered:當內容顯示的時候觸發。
(7)Closing:嘗試關閉窗口時觸發,可以將參數CancelEventArgs的Cancel的屬性設置為true,取消關閉操作。
(8)Unloaded:當關閉窗口並且從可視化樹移除后觸發。
(9)Closed:在窗口關閉后觸發該事件,無法取消。