WPF學習日誌 ~ 事件傳遞 ~

這篇簡單的說明一下在WPF中事件傳遞的部分,下面是測試的程式碼
Class Window1
Dim sp As StackPanel

Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
sp = New StackPanel
Me.Content = sp
Dim tb As New TextBlock
tb.Text = "I am a TextBlock"
sp.Children.Add(tb)
Dim btn As New Button
btn.Content = "Button"
sp.Children.Add(btn)
Dim txt As New TextBox
txt.Text = "Test words"
sp.Children.Add(txt)
AddHandler Me.MouseDown, AddressOf El_OnMouseDown
End Sub

Protected Sub El_OnMouseDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
If e.ChangedButton = MouseButton.Right Then
Me.Title = "Source:" & e.Source.ToString & " OriginalSource:" & e.OriginalSource.ToString
If CType(e.Source, FrameworkElement).Margin = New Thickness(5) Then
CType(e.Source, FrameworkElement).Margin = New Thickness(1)
Else
CType(e.Source, FrameworkElement).Margin = New Thickness(5)
End If
End If
End Sub
End Class

執行程式碼之後,在Button或是TextBlock的上面按下滑鼠右鍵,你會發現該元素的邊界變大了,要留意的是,我們只有在"Me"(Window)的MouseDown掛載事件喔,以往如果是Windows Form,點在Button上面,那麼Form就收不到事件了。
事件傳遞會牽涉到"邏輯樹"以及"視覺樹",這部分等之後有機會我們再來說明,有興趣的可以先到書店翻翻書

留言

這個網誌中的熱門文章

開啟cshtml檔案時,出現『並未將物件參考設定為物件執行個體』的錯誤訊息

無法設定中斷點 尚未載入符號檔

DataGridView欄位計算總合