Xaml-event-handling

提供:Dev Guides
移動先:案内検索

XAML-イベント処理

XAMLのイベントの一般的な概念は、.NETやC ++などの他の一般的なプログラミング言語のイベントに似ています。 XAMLでは、すべてのコントロールが特定の目的でサブスクライブできるようにいくつかのイベントを公開します。

イベントが発生するたびに、アプリケーションに通知され、プログラムはそれらに反応できます。たとえば、ダイアログを閉じるために閉じるボタンが使用されます。

そのアプリケーションの要件に基づいてアプリケーションのさまざまな動作をサブスクライブできるイベントには多くの種類がありますが、最も一般的に使用されるイベントは、マウスやキーボードに関連するイベントです。

  • クリック
  • MouseDown
  • MouseEnter
  • MouseLeave
  • MouseUp
  • キーダウン
  • キーアップ

この章では、特定のコントロールのイベントが、特定のイベントが発生したときにユーザーが何をしたいのかに応じて実装されるコードビハインドにどのようにリンクできるかを理解するために、いくつかの基本的で最も一般的に使用されるイベントを使用します発生します。

ボタンクリックイベントの簡単な例を見てみましょう。 以下に、いくつかのプロパティとClickイベント(Click = "OnClick")で作成および初期化されるButtonコントロールのXAML実装を示します。

<Window x:Class = "XAMLEventHandling.MainWindow"
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
   Title = "MainWindow" Height = "350" Width = "604">

   <Grid>
      <Button x:Name = "button1" Content = "Click" Click = "OnClick"
         Width = "150" Height = "30" HorizontalAlignment = "Center"/>
   </Grid>

</Window>

このボタンがクリックされるたびに、 OnClick イベントが発生し、クリックへの応答として任意のタイプの動作を追加できます。 このボタンがクリックされたときにメッセージを表示するOnClickイベントの実装を見てみましょう。

using System;
using System.Windows;
using System.Windows.Controls;

namespace XAMLEventHandling {
  ///<summary>
     ///Interaction logic for MainWindow.xaml
  ///</summary>

   public partial class MainWindow : Window {
      public MainWindow() {
         InitializeComponent();
      }
      private void OnClick(object sender, RoutedEventArgs e) {
         MessageBox.Show("Button is clicked!");
      }
   }
}

上記のコードをコンパイルして実行すると、次の出力が生成されます-

イベント処理

ボタンをクリックすると、クリック(OnClick)イベントが発生し、次のメッセージが表示されます。

イベント処理関数

次に、複数のイベントが処理される少し複雑な例を見てみましょう。

次の例には、テキストボックス内のテキストを操作するContextMenuを持つテキストボックスが含まれています。

次のXAMLコードは、Checked、Unchecked、Clickなどのいくつかのプロパティとイベントを持つTextBox、ContextMenu、およびMenuItemsを作成します。

<Window x:Class = "XAMLContextMenu.MainWindow"
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
   Title = "MainWindow" Height = "350" Width = "604">

   <Grid>
      <TextBox Name = "textBox1" TextWrapping = "Wrap" Margin = "10" Grid.Row = "7">
         Hi, this is XAML tutorial.
         <TextBox.ContextMenu>

            <ContextMenu>
               <MenuItem Header = "_Bold" IsCheckable = "True"
                  Checked = "Bold_Checked" Unchecked = "Bold_Unchecked"/>
               <MenuItem Header = "_Italic" IsCheckable = "True"
                  Checked = "Italic_Checked" Unchecked = "Italic_Unchecked"/>
               <Separator/>
               <MenuItem Header = "Increase Font Size" Click = "IncreaseFont_Click"/>
               <MenuItem Header = "_Decrease Font Size" Click = "DecreaseFont_Click"/>
            </ContextMenu>

         </TextBox.ContextMenu>
      </TextBox>
   </Grid>

</Window>

以下は、メニュー項目がチェック、チェック解除、またはクリックされるたびに起動されるさまざまなイベントのC#での実装です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace XAMLContextMenu {
  ///<summary>
     ///Interaction logic for MainWindow.xaml
  ///</summary>

   public partial class MainWindow : Window {
      public MainWindow() {
         InitializeComponent();
      }
      private void Bold_Checked(object sender, RoutedEventArgs e) {
         textBox1.FontWeight = FontWeights.Bold;
      }
      private void Bold_Unchecked(object sender, RoutedEventArgs e) {
         textBox1.FontWeight = FontWeights.Normal;
      }
      private void Italic_Checked(object sender, RoutedEventArgs e) {
         textBox1.FontStyle = FontStyles.Italic;
      }
      private void Italic_Unchecked(object sender, RoutedEventArgs e) {
         textBox1.FontStyle = FontStyles.Normal;
      }
      private void IncreaseFont_Click(object sender, RoutedEventArgs e) {
         if (textBox1.FontSize < 18) {
            textBox1.FontSize += 2;
         }
      }
      private void DecreaseFont_Click(object sender, RoutedEventArgs e) {
         if (textBox1.FontSize > 10) {
            textBox1.FontSize -= 2;
         }
      }
   }
}

上記のコードをコンパイルして実行すると、次の出力が生成されます-

ContextMenu Output

上記のサンプルコードを実行し、他のイベントで実験することをお勧めします。

イベント

以下は、さまざまなコントロールで一般的に使用されるイベントです。

Sr.No. Controls & Description
1

Checked

ToggleButtonがチェックされたときに発生します。 (ToggleButtonから継承)

2

Click

ボタンコントロールがクリックされたときに発生します。 (ButtonBaseから継承)

3

ContextMenuClosing

要素のコンテキストメニューが閉じられる直前に発生します。 (FrameworkElementから継承されます。)

4

ContextMenuOpening

要素のコンテキストメニューが開かれたときに発生します。 (FrameworkElementから継承されます。)

5

DataContextChanged

FrameworkElement.DataContextプロパティの値が変更されたときに発生します。 (FrameworkElementから継承されます)

6

DragEnter

入力システムが、この要素をターゲットとして基になるドラッグイベントを報告したときに発生します。 (UIElementから継承されます)。

7

DragLeave

入力システムが、この要素を起点として基本的なドラッグイベントを報告したときに発生します。 (UIElementから継承)

8

DragOver

入力システムが潜在的なドロップターゲットとしてこの要素を持つ基本的なドラッグイベントを報告するときに発生します。 (UIElementから継承)

9

DragStarting

ドラッグ操作が開始されたときに発生します。 (UIElementから継承)

10

DropCompleted

ドラッグアンドドロップ操作が終了したときに発生します。 (UIElementから継承)

11

DropDownClosed

ComboBoxのドロップダウン部分が閉じたときに発生します。

12

DropDownOpened

ComboBoxのドロップダウン部分が開いたときに発生します。

13

GotFocus

UIElementがフォーカスを受け取ったときに発生します。 (UIElementから継承)

14

Holding

この要素のヒットテスト領域上で未処理のホールド操作が発生すると発生します。 (UIElementから継承)

15

Intermediate

ToggleButtonの状態が不確定状態に切り替えられたときに発生します。 (ToggleButtonから継承)

16

IsEnabledChanged

IsEnabledプロパティが変更されたときに発生します。 (Controlから継承)

17

KeyDown

UIElementにフォーカスがあるときにキーボードキーが押されると発生します。 (UIElementから継承)

18

KeyUp

UIElementにフォーカスがあるときにキーボードキーが離されると発生します。 (UIElementから継承)

19

LostFocus

UIElementがフォーカスを失ったときに発生します。 (UIElementから継承)

20

ManipulationCompleted

UIElementの操作が完了したときに発生します。 (UIElementから継承)

21

ManipulationDelta

入力デバイスが操作中に位置を変更すると発生します。 (UIElementから継承)

22

ManipulationInertiaStarting

入力デバイスが操作中にUIElementオブジェクトとの接触を失い、慣性が始まると発生します。 (UIElementから継承)

23

ManipulationStarted

入力デバイスがUIElementで操作を開始すると発生します。 (UIElementから継承)

24

ManipulationStarting

操作プロセッサが最初に作成されたときに発生します。 (UIElementから継承)

25

SelectionChanged

テキストの選択が変更されたときに発生します。

26

SizeChanged

ActualHeightまたはActualWidthプロパティがFrameworkElementの値を変更したときに発生します。 (FrameworkElementから継承されます)

27

Unchecked

ToggleButtonのチェックが解除されたときに発生します。 (ToggleButtonから継承)

28

ValueChanged

範囲の値が変更されたときに発生します。 (RangeBaseから継承)