XAML-イベント処理

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

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

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

  • Click
  • MouseDown
  • MouseEnter
  • MouseLeave
  • MouseUp
  • KeyDown
  • KeyUp

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

ボタンクリックイベントの簡単な例を見てみましょう。以下に示すのは、いくつかのプロパティと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; 
         } 
      }
   }
}

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

上記のサンプルコードを実行して、他のいくつかのイベントを試すことをお勧めします。

イベント

シニア番号 コントロールと説明
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プロパティが変更されたときに発生します。(コントロールから継承)

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から継承)