대부분의 WPF 응용 프로그램은 태그와 코드 숨김으로 구성됩니다. 프로젝트에서 XAML은 .xaml 파일로 작성되며 코드 숨김 파일은 Microsoft Visual Basic .NET 또는 C# 등의 CLR 언어를 사용하여 작성됩니다. XAML 파일이 컴파일될 때 각 XAML 페이지에 대한 XAML 코드 숨김 파일의 위치는 네임스페이스와 클래스를 XAML 페이지 루트 요소의 x:Class 특성으로 지정하여 식별합니다.
지금까지의 예제에서 몇 개의 단추를 살펴보았지만 아직 논리적 동작이 연결된 단추는 없었습니다. 개체 요소에 대한 동작을 추가하는 기본 응용 프로그램 수준 메커니즘은, 요소 클래스의 기존 이벤트를 사용하고 런타임에서 해당 이벤트가 발생할 때 호출되는 해당 이벤트에 대한 특정 처리기를 작성하는 것입니다. 사용할 이벤트 이름과 처리기 이름은 태그에서 지정하고 처리기를 구현하는 코드는 코드 숨김에서 정의합니다.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyNamespace.MyPageCode">
<Button Click="ClickHandler" >Click Me!</Button>
</Page>
namespace MyNamespace
{
public partial class MyPageCode
{
void ClickHandler(object sender, RoutedEventArgs e)
{
Button b = e.Source as Button;
b.Background = Brushes.Red;
}
}
}
코드 숨김 파일은 CLR 네임스페이스 MyNamespace를 사용하며 MyPageCode를 해당 네임스페이스 안에서 partial 클래스로 선언합니다. 이는 태그 루트에 제공되는 MyNamespace.MyPageCode의 x:Class 특성 값과 비교됩니다. 컴파일러는 루트 요소 형식에서 클래스를 파생하여 모든 컴파일된 XAML 페이지에 대한 partial 클래스를 자동으로 만듭니다. 같은 partial 클래스를 정의하는 코드 숨김을 제공하는 경우, 결과 코드는 컴파일된 응용 프로그램의 동일한 네임스페이스와 클래스 안에서 결합됩니다.
코드 숨김 프로그래밍의 요구 사항에 대한 자세한 내용은 코드 숨김 및 XAML의 "코드 숨김, 이벤트 처리기 및 partial 클래스 요구 사항" 단원을 참조하십시오.
별도의 코드 숨김 파일을 만들지 않으려면 코드를 XAML 파일 안에 인라인으로 넣을 수도 있습니다. 하지만 인라인 코드는 제한이 많은 기술입니다. 자세한 내용은 코드 숨김 및 XAML을 참조하십시오.
이벤트 특성 구문
태그에서 이벤트를 통해 동작을 지정할 때는 일반적으로 특성 구문을 사용하여 처리기를 연결합니다. 이벤트 특성이 지정된 개체 요소는 이벤트를 수신하고 처리기를 호출하는 인스턴스가 됩니다. 처리하고자 하는 특정 이벤트의 이름이 특성 이름입니다. 특성 값은 정의할 처리기의 메서드 이름입니다. 그런 다음 해당 이벤트에 대한 대리자를 기반으로 하는 처리기와 함께 처리기 구현을 코드 숨김에서 제공해야 합니다. 코드 숨김의 처리기는 Microsoft Visual Basic .NET 또는 C# 등의 프로그래밍 언어로 작성합니다.
각 WPF 이벤트는 이벤트가 발생할 때 이벤트 데이터를 보고합니다. 이벤트 처리기는 이 이벤트 데이터에 액세스할 수 있습니다. 앞의 예제에서 처리기는 이벤트 데이터를 통해 보고된 이벤트 소스를 가져온 다음 해당 소스에 대해 속성을 설정합니다.
라우트된 이벤트
WPF에 고유하며 기본이 되는 라우트된 이벤트라는 기능이 있습니다. 라우트된 이벤트를 사용하면 요소가 다른 요소에 의해 발생한 이벤트를 처리할 수 있습니다. 단, 요소들이 요소 트리 관계를 통해 연결되어 있어야 합니다. XAML 특성을 사용하여 이벤트 처리를 지정할 때 라우트된 이벤트는 클래스 멤버 표에서 해당 이벤트를 나열하지 않는 요소를 포함하여 모든 요소에서 수신되고 처리될 수 있습니다. 이렇게 하려면 소유 클래스 이름으로 이벤트 이름 특성을 정규화합니다. 예를 들어, StackPanel / Button 예제의 부모 StackPanel은 처리기 이름을 특성 값으로 사용하고 StackPanel 개체 요소에 대해 Button.Click 특성을 지정하여 자식 요소 단추의 Click 이벤트에 대한 처리기를 등록할 수 있습니다. 자세한 내용은 라우트된 이벤트 개요를 참조하십시오.