处理事件不适用于WPF中的代码

时间:2011-11-05 14:01:25

标签: wpf events xaml event-handling

我正在研究一个项目,我遇到了一些问题,我似乎无法解决自己。我尽可能地简化了代码,并开始了一个新的小项目,看看这是否是由于对其他大项目的干扰造成的。

这就是我所拥有的:

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”没有。你认为我犯了什么错误?

1 个答案:

答案 0 :(得分: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")

我希望这很有帮助,
萨姆。