2017년 6월 11일 일요일

WPF Tutorial 강좌 번역 #6 - Events in XAML

source(출처) - http://www.wpf-tutorial.com/xaml/events-in-xaml/

사전지식
  • 코드 인라인 & 코드 비하인드 (code-inline & code-behind)
    • code-inline : 디자인 코드와 백앤드 소스 코드를 함께 기술
    • code-behind : 디자인, 백앤드 소스를 따로 기술
WPF Tutorial 강좌 번역 #6

Events in XAML

대부분의 최신 UI 프레임 워크는 이벤트 중심이며 WPF도 마찬가지입니다. Window (Control 클래스를 상속하는)를 비롯한 모든 컨트롤은 사용자가 가입 할 수있는 이벤트 범위를 노출합니다. 이러한 이벤트에 가입 할 수 있습니다. 즉, 응용 프로그램이 발생할 때이를 알리고 그에 대응할 수 있습니다.

다양한 유형의 이벤트가 있지만 가장 일반적으로 사용되는 일부는 마우스 또는 키보드를 사용하여 사용자의 응용 프로그램과 상호 작용하는 데 응답하는 것입니다. 대부분의 컨트롤에서 KeyDown, KeyUp, MouseDown, MouseEnter, MouseLeave, MouseUp 및 기타 여러 이벤트를 찾을 수 있습니다.


이 이벤트는 복잡한 주제이므로 WPF에서 이벤트가 작동하는 방식을 자세히 살펴 보겠습니다.하지만 지금은 XAML의 컨트롤 이벤트를 코드 숨김 파일의 코드에 연결하는 방법을 알아야합니다. 이 예제를 살펴보십시오.
<Window x:Class="WpfTutorialSamples.XAML.EventsSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="EventsSample" Height="300" Width="300">
    <Grid Name="pnlMainGrid" MouseUp="pnlMainGrid_MouseUp" Background="LightBlue">        
                
    </Grid>
</Window>
메서드 이름을 작성하여 Grid의 MouseUp 이벤트를 구독 한 방법에 주목하십시오. 이 메서드는 올바른 이벤트 서명을 사용하여 코드 숨김으로 정의해야합니다. 이 경우 다음과 같아야합니다.
private void pnlMainGrid_MouseUp(object sender, MouseButtonEventArgs e)
{
        MessageBox.Show("You clicked me at " + e.GetPosition(this).ToString());
}
MouseUp 이벤트는 사용자가 가입 한 MouseButtonEventHandler라는 대리자를 사용합니다. 여기에는 보낸 사람 (이벤트를 발생시킨 컨트롤)과 유용한 정보가 포함 된 MouseButtonEventArgs 개체의 두 매개 변수가 있습니다. 이 예제에서 마우스 커서의 위치를 가져 와서 사용자에게 알려줍니다.


MouseUp 및 MouseDown은 MouseButtonEventHandler 대리자를 사용하는 반면 MouseMove 이벤트는 MouseEventHandler 대리자를 사용하는 등 여러 이벤트에서 동일한 대리자 형식을 사용할 수 있습니다.
이벤트 처리기 메서드를 정의 할 때 사용하는 대리자를 알고 있어야하며 알 수없는 경우 해당 문서에서 찾아 볼 수 있습니다.

다행히 Visual Studio는 이벤트에 대한 올바른 이벤트 처리기를 생성하는 데 도움이 될 수 있습니다. 이렇게하는 가장 쉬운 방법은 XAML에 이벤트의 이름을 쓰고 VS의 IntelliSense가 나머지 작업을 수행하도록하는 것입니다.

Visual Studio helping to create a new event handler



<New Event Handler>를 선택하면 Visual Studio에서 코드 숨김 파일에 적절한 이벤트 처리기를 생성합니다. 우리의 경우에는 pnlMainGrid_MouseDown에서 <control name> _ <event name>이라는 이름이 지정됩니다. 이벤트 이름을 마우스 오른쪽 단추로 클릭하고 이벤트 처리기로 이동을 선택하면 VS에서 바로 처리합니다.

C# 소스 코드에서 이벤트 생성하기

이벤트를 구독하는 가장 일반적인 방법은 위에 설명되어 있지만 code-behind 대신 이벤트를 직접 구독하려는 경우가 있습니다. 이 작업은 + = C # 구문을 사용하여 수행됩니다.

이 구문에서는 이벤트 처리기를 개체의 이벤트에 직접 추가합니다.
using System;
using System.Windows;
using System.Windows.Input;

namespace WpfTutorialSamples.XAML{
        public partial class EventsSample : Window
        {
                public EventsSample()
                {
                        InitializeComponent();
                        pnlMainGrid.MouseUp += new MouseButtonEventHandler(pnlMainGrid_MouseUp);
                }

                private void pnlMainGrid_MouseUp(object sender, MouseButtonEventArgs e)
                {
                        MessageBox.Show("You clicked me at " + e.GetPosition(this).ToString());
                }

        }
}










댓글 없음:

댓글 쓰기