2011-11-05 34 views
2

我正在開發一個項目,但遇到了我無法解決的問題。我儘可能地簡化了代碼,並開始了一個新的小型項目,看看這是不是由於對其他大型項目的干擾而引起的。WPF中的代碼處理事件不起作用

這是我有:

XAML:

<Window Loaded="Window_Loaded" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="MainWindow"> 
<Label MouseDown="Label1_MouseDown" Content="y u no work?!" Name="Label1"/> 
</Window> 

CODE:

Class MainWindow 

Private Sub Label1_MouseDown(sender As System.Object, e As System.Windows.Input.MouseButtonEventArgs) 
    MsgBox("md1") 
End Sub 

Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) 
    ' Doesn't work 
    Label1.AddHandler(Mouse.MouseDownEvent, Sub() MsgBox("md2")) 
    ' Doesn't work neither 
    Mouse.AddMouseDownHandler(Label1, Sub() MsgBox("md3")) 
End Sub 

End Class 

「MD1」 彈出,符合市場預期。 「md2」和「md3」沒有。你認爲我犯了什麼錯誤?

回答

3

以下代碼行是錯誤的,並拋出一個沉默的「處理程序類型不匹配」異常。

Label1.AddHandler(Mouse.MouseDownEvent, Sub() MsgBox("md2")) 

因此,實際上完美的下一行不會運行。

所以下面的工作正常。

Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) 
    Mouse.AddMouseDownHandler(Label1, Sub() MsgBox("md2")) 
    Mouse.AddMouseDownHandler(Label1, Sub() MsgBox("md3")) 
End Sub 

我個人會用以下添加處理程序,但我不知道是否有比其他任何優勢或差異,在我看來,提高可讀性。

AddHandler Label1.MouseDown, Sub() MsgBox("md4") 

我希望這是有幫助的,
薩姆。

+0

非常感謝,山姆!你的回答確實有幫助,再次感謝! –

+0

樂意幫忙:) – SeriousSamP