WPF 添加处理程序到 System.Windows.Controls.Label

WPF AddHandler to System.Windows.Controls.Label

我正在尝试向我动态创建的标签 (System.Windows.Controls.Label) 的 MouseLeftButtonUp 添加处理程序,但我收到一条错误消息

Argument not specified for parameter 'e' of 'Private Sub btnLink_Clicked(sender As Object, e As MouseButtonEventArgs)

Private Sub CreateClickableLabel()

   Dim btnLink As New System.Windows.Controls.Label()

   btnLink.Content = "Click Me"
   AddHandler btnLink.MouseLeftButtonUp, btnLink_Clicked

   Windows.Controls.Grid.SetColumn(btnLink, 0)
   Windows.Controls.Grid.SetRow(btnLink, 0)
   gridData.Children.Add(btnLink)
End Sub


Private Sub btnLink_Clicked(ByVal sender As Object, ByVal e As MouseButtonEventArgs)

   MessageBox.Show("You clicked me")

End Sub

如何以编程方式将此事件处理程序添加到我的标签中?一旦我将有更多标签由同一功能处理?

您缺少 AddressOf operator:

AddHandler btnLink.MouseLeftButtonUp, AddressOf btnLink_Clicked

在 VB.NET 中,每次引用没有 calling/executing 的方法(子函数或函数)时,您都必须使用 AddressOf。例如,如果你想将它作为参数传递给另一个 method/statement/operator,或者你想将它存储在一个变量中并在你的代码中使用它。

这是必需的,因为 AddressOf 创建了一个 Delegate 您的方法。 Delegate 基本上是围绕方法指针的面向对象的包装器,这意味着您现在可以像对待 .NET 中的任何其他对象一样对待它。

阅读更多: Delegates (Visual Basic) | Microsoft Docs