코드 숨김 및 XAML

업데이트: 2007년 11월

코드 숨김은 XAML 페이지를 응용 프로그램으로 컴파일할 때 XAML 프로세서가 만드는 코드와 결합되는 코드를 설명하기 위해 사용하는 용어입니다. 이 항목에서는 XAML 코드에 대한 대체 인라인 코드 메커니즘 및 코드 숨김에 대한 요구 사항을 설명합니다.

이 항목에는 다음 단원이 포함되어 있습니다.

  • 사전 요구 사항
  • 코드 숨김, 이벤트 처리기 및 partial 클래스 요구 사항
  • x:Code
  • 인라인 코드 제한
  • 관련 항목

사전 요구 사항

이 항목에서는 독자가 XAML 개요를 읽었으며 CLR 및 개체 지향 프로그래밍에 대한 기본적인 지식을 갖고 있다고 가정합니다.

코드 숨김, 이벤트 처리기 및 partial 클래스 요구 사항

  • partial 클래스는 루트 요소로 사용된 클래스의 형식에서 파생되어야 합니다. 코드 숨김의 partial 클래스 정의에서 파생을 공백으로 둘 수 있지만 컴파일된 결과에서는 지정되지 않았더라도 페이지 루트를 partial 클래스의 기본 클래스인 것으로 가정합니다(partial 클래스의 태그에서 페이지 루트를 기본으로 지정했기 때문에).

  • 작성하는 이벤트 처리기는 x:Class로 식별된 CLR 네임스페이스 내의 partial 클래스로 정의된 인스턴스 메서드여야 합니다. XAML 프로세서가 다른 클래스 범위에서 처리기를 찾도록 지시하기 위해 이벤트 처리기의 이름을 정규화할 수 없습니다. 또한 정적 메서드를 이벤트 처리기로 사용할 수도 없습니다.

  • 처리기는 적절한 이벤트에 대한 대리자와 일치해야 합니다.

  • Microsoft Visual Basic .NET 언어의 경우에는 처리기를 XAML의 특성에 연결하는 대신 언어 특정 Handles 키워드를 사용하여 처리기 선언에서 인스턴스 및 이벤트와 연결해야 합니다. 하지만 Handles는 특정 라우트된 이벤트 시나리오 또는 연결된 이벤트 등과 같은 WPF 이벤트 시스템의 모든 기능을 지원할 수는 없기 때문에 이 기술에는 몇 가지 제한이 따릅니다. 자세한 내용은 Visual Basic 및 WPF 이벤트 처리를 참조하십시오.

x:Code

x:Code는 XAML에서 정의된 지시문 요소입니다. x:Code 지시문 요소에는 인라인 프로그래밍 코드가 포함될 수 있습니다. 인라인으로 정의된 코드는 같은 페이지의 XAML과 상호 작용할 수 있습니다. 다음 예제에서는 인라인 C# 코드를 보여 줍니다. 코드는 x:Code 요소 안에 있으며 XAML 프로세서(XAML 스키마 또는 WPF 스키마를 해석하는)가 콘텐츠를 XML 그대로 해석하지 않도록 하기 위해 코드를 <CDATA[...]]>로 감싸서 XML에 대한 콘텐츠를 이스케이프해야 합니다.

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="MyNamespace.MyCanvasCodeInline"
>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code><![CDATA[
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Page>

인라인 코드 제한

XAML 기반 응용 프로그램에 대해서는 인라인 코드의 사용을 피하거나 제한해야 합니다. 아키텍처 및 코딩 원칙의 측면에서 보면 태그와 코드 숨김을 분리하면 디자이너와 개발자 역할을 더 구분할 수 있습니다. 더 기술적인 측면에서 보면 항상 XAML 페이지의 생성된 partial 클래스에 작성하며 기본 XML 네임스페이스 매핑만 사용할 수 있기 때문에 인라인 코드로 코드를 작성하는 것은 어려운 작업일 수 있습니다. using 문을 추가할 수 없기 때문에 API 호출 대부분을 정규화해야 합니다. 기본 WPF 매핑에는 WPF 어셈블리에 있는 CLR 네임스페이스 전부는 아니지만 대부분이 포함됩니다. 다른 CLR 네임스페이스에 포함된 API에 대한 호출은 정규화해야 합니다. 또한 인라인 코드에서는 여러 클래스를 정의할 수 없으며 모든 코드 엔터티는 생성된 partial 클래스 내에서 멤버 또는 변수로 존재해야 합니다. 전역 변수 또는 빌드 변수에 대한 #ifdef 또는 매크로 등과 같은 다른 언어 특정 프로그래밍 기능도 사용할 수 없습니다. 자세한 내용은 x:Code XAML 지시문 요소를 참조하십시오.

참고 항목

개념

XAML 개요

WPF 응용 프로그램 만들기(WPF)

XAML 구문 용어

참조

x:Code XAML 지시문 요소