如何:使用代码添加事件处理程序

更新:2007 年 11 月

此示例演示如何使用代码为元素添加事件处理程序。

如果您希望为某个 XAML 元素添加事件处理程序,而包含该元素的标记页面已经加载,则必须使用代码添加该处理程序。或者,如果您正在完全使用代码为应用程序生成元素树,而没有使用 XAML 声明任何元素,则可以调用特定的方法将事件处理程序添加到构造的元素树中。

示例

下面的示例向最初使用 XAML 定义的现有页面上添加一个新的 Button。代码隐藏文件实现一个事件处理程序方法,然后添加该方法添加为 Button 的一个新的事件处理程序。

C# 示例使用 += 运算符为事件指定处理程序。这与公共语言运行时 (CLR) 事件处理模型中用来指定处理程序的运算符相同。Microsoft Visual Basic 不支持使用此运算符添加事件处理程序。相反,它要求使用下列两种方法之一:

  • AddHandler 方法和 AddressOf 运算符结合使用,以引用事件处理程序实现。

  • 使用 Handles 关键字作为事件处理程序定义的一部分。此处未演示此方法;请参见 Visual Basic 和 WPF 事件处理

<TextBlock Name="text1">Start by clicking the button below</TextBlock>
<Button Name="b1" Click="MakeButton">Make new button and add handler to it</Button>
Public Partial Class RoutedEventAddRemoveHandler
    Private Sub MakeButton(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Dim b2 As Button = New Button()
        b2.Content = "New Button"
        AddHandler b2.Click, AddressOf Onb2Click
        root.Children.Insert(root.Children.Count, b2)
        DockPanel.SetDock(b2, Dock.Top)
        text1.Text = "Now click the second button..."
        b1.IsEnabled = False
    End Sub
    Private Sub Onb2Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        text1.Text = "New Button (b2) Was Clicked!!"
    End Sub
public partial class RoutedEventAddRemoveHandler {
    void MakeButton(object sender, RoutedEventArgs e)
    {
        Button b2 = new Button();
        b2.Content = "New Button";
        // Associate event handler to the button. You can remove the event 
        // handler using "-=" syntax rather than "+=".
        b2.Click  += new RoutedEventHandler(Onb2Click);
        root.Children.Insert(root.Children.Count, b2);
        DockPanel.SetDock(b2, Dock.Top);
        text1.Text = "Now click the second button...";
        b1.IsEnabled = false;
    }
    void Onb2Click(object sender, RoutedEventArgs e)
    {
        text1.Text = "New Button (b2) Was Clicked!!";
    }
说明:

在最初分析的 XAML 页面上添加一个事件处理程序要简单得多。在要添加事件处理程序的对象元素中,添加一个与您要处理的事件的名称匹配的属性。然后将该属性的值指定为您在 XAML 页面的代码隐藏文件中定义的事件处理程序方法的名称。有关更多信息,请参见 XAML 概述路由事件概述

有关完整示例,请参见 添加事件处理程序的示例

请参见

任务

添加事件处理程序的示例

概念

路由事件概述

其他资源

事件帮助主题

事件示例