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; 
         } 
      }
   }
}

위의 코드를 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

위의 예제 코드를 실행하고 다른 이벤트를 실험 해 보는 것이 좋습니다.

이벤트

Sr. 아니. 컨트롤 및 설명
1

Checked

ToggleButton이 선택되면 발생합니다. (ToggleButton에서 상 속됨)

2

Click

단추 컨트롤을 클릭하면 발생합니다. (ButtonBase에서 상 속됨)

삼

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에서 상 속됨)