사전지식
WPF Tutorial 강좌 번역 #6- 코드 인라인 & 코드 비하인드 (code-inline & code-behind)
- code-inline : 디자인 코드와 백앤드 소스 코드를 함께 기술
- code-behind : 디자인, 백앤드 소스를 따로 기술
Events in XAML
다양한 유형의 이벤트가 있지만 가장 일반적으로 사용되는 일부는 마우스 또는 키보드를 사용하여 사용자의 응용 프로그램과 상호 작용하는 데 응답하는 것입니다. 대부분의 컨트롤에서 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가 나머지 작업을 수행하도록하는 것입니다.
<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()); } } }
댓글 없음:
댓글 쓰기