ボタンのイベントハンドラーを設定する
コントロールのイベントを表す属性にコードビハインドのメソッド名を指定します。すると、コントロールでイベントが発生したときに、そのコードビハインドのメソッドが呼び出されます。このコードビハインドのメソッドをイベントハンドラーと呼びます。
例えば、ボタンがクリックされるとClickイベントが発生します。そのイベントハンドラーを追加してみましょう。
まず、XAMLデザイナーで、ボタン要素にClick属性を書きます。「Click=」まで書いたところで、次の画像のようにIntelliSenseが働くはずです。
上の状態で[Enter]キーか[Tab]キーを押すと、「Button_Click」という名前でイベントハンドラーが作成されます(次の画像)。
イベントハンドラーを違う名前で作りたいときは、先の状態で[Enter]キー/[Tab]キーを押さずに、イベントハンドラー名をキー入力します。
ここからはイベントハンドラーにコードを書いていきます。XAMLの属性値Button_Clickの中か直後にカーソルを置いた状態で[F12]キーを押して、コードビハインドにジャンプしましょう(このとき、まだイベントハンドラーが存在しなければ、イベントハンドラーが生成されます)。なお、書くコードが短いときは、[Alt]+[F12]キーを押すとその場に小さいウィンドウが開いてコードビハインドの編集ができます。
コードビハインド側に自動生成されたイベントハンドラーは、次の画像のようになっています。
イベントハンドラーにコードを書く
作成したButton_Clickイベントハンドラーは、ボタンがクリックされたときに呼び出されるものです。ここに、ボタンがクリックされたときにアプリにやらせたい処理を書いていけばよいのです。
なんでもよいのですが、ここではTextBlockコントロールの表示を現在時刻に変えてみましょう。次のコードのように1行追加します。
private void Button_Click(object sender, RoutedEventArgs e)
{
Text1.Text = $"現在時刻は{DateTimeOffset.Now:HH:mm}";
}
これで、ボタンをクリックしたときに、TextBlockの表示が現在時刻に変わります。なお、先頭に「$」記号が付いた文字列は文字列補間(または補間文字列)と呼ばれていて、その中の波かっこ「{}」で囲まれた部分の式を評価して文字列に当てはめてくれます(C# 6からの機能)。ちなみに、「補間」とは複数の値からその途中の値を近似計算するという意味の数学用語で、文字列の欠けている部分に当てはめるという意味では「補完」の方がふさわしいです。
では、デバッグ実行してみましょう。ボタンをクリックすると次の画像のようになります。
あ、「現在時刻」というのはおかしいですね。これはクリックしたときの時刻です。ちょっと修正しましょうか。デバッグ実行を続けたまま、イベントハンドラーの先頭にブレークポイントを置きます(次の画像)。ブレークポイントを置きたい行にカーソルを置いてから[F9]キーを押すか、または、ブレークポイントを置きたい行の左端の灰色の部分(次の画像でブレークポイントを示す赤丸が表示されているところ)をマウスでクリックすることで、ブレークポイントを置けます(もういちど同じ操作でブレークポイント解除)。
もう一度ボタンをクリックすると、今度はブレークポイントでデバッグ実行が中断します。次のコードのように文字列を書き換えてから、[F5]キーを押してデバッグ実行を再開してみてください。
private void Button_Click(object sender, RoutedEventArgs e)
{
Text1.Text = $"クリックしたのは{DateTimeOffset.Now:HH:mm}";
}
その場で修正が反映されて、デバッグ実行が継続されます(次の画像)。
これは、.NET Framework 4.6からの機能で(.NET Core 3も含まれます)、「エディットコンティニュー」と呼ばれます。簡単な修正なら、このようにデバッグ実行中に書き換えられるのです。継続不可能な修正を加えた場合には、再修正するかデバッグを停止するかを尋ねられます。
ここまで来れば、あとはどんなコントロールがあってそれをどう使えばいいのかを調べていけば、どんどんWPFのプログラムを作って行けそうですね! "Hello, WPF !"、卒業です。
