方法: コードを使用してイベント ハンドラーを追加する

この例では、コードを使用して、イベント ハンドラーを要素に追加する方法を示します。

イベント ハンドラーを XAML 要素に追加し、その要素を含むマークアップ ページが既に読み込まれている場合は、コードを使用してハンドラーを追加する必要があります。 または、コードを使用してアプリケーションの要素ツリーを全体的に構築し、XAML を使用して要素を宣言しない場合は、特定のメソッドを呼び出して、構築された要素ツリーにイベント ハンドラーを追加できます。

次の例では、最初に XAML で定義された既存のページに新しい Button を追加します。 分離コード ファイルでは、イベント ハンドラー メソッドが実装され、そのメソッドは Button の新しいイベント ハンドラーとして追加されます。

C# の例では、+= 演算子を使用して、ハンドラーをイベントに割り当てています。 これは、共通言語ランタイム (CLR) イベント処理モデルでハンドラーを割り当てるために使用される演算子と同じです。 Microsoft Visual Basic では、イベント ハンドラーを追加する手段として、この演算子はサポートされません。 代わりに、次の 2 つの方法のいずれかが必要です。

  • 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 {
    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!!";
    }
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

注意

最初に解析された XAML ページでイベント ハンドラーを追加する方がはるかに簡単です。 イベント ハンドラーを追加するオブジェクト要素内で、処理するイベントの名前と一致する属性を追加します。 次に、XAML ページの分離コードファイルで定義したイベント ハンドラー メソッドの名前として、その属性の値を指定します。 詳細については、「WPF の XAML」または「ルーティング イベントの概要」を参照してください。

関連項目