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