WPF의 코드 숨김 및 XAML

코드 숨김은 XAML 페이지가 태그 컴파일되는 경우 태그 정의된 개체와 조인된 코드를 설명하는 데 사용되는 용어입니다. 이 항목에서는 코드 숨김에 대한 요구 사항과 XAML의 코드에 대한 대체 인라인 코드 메커니즘을 설명합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

필수 구성 요소

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

코드 숨김 및 XAML 언어

XAML 언어에는 태그 파일 쪽에서 코드 파일을 태그 파일과 연결할 수 있도록 하는 언어 수준 기능이 포함됩니다. 특히 XAML 언어는 언어 기능인 x:Class 지시문, x:Subclass 지시문, x:ClassModifier 지시문을 정의합니다. 정확히 코드를 생성하는 방법과 태그 및 코드를 통합하는 방법은 XAML 언어가 지정하는 항목에 포함되지 않습니다. 코드를 통합하는 방법, 애플리케이션 및 프로그래밍 모델에서 XAML을 사용하는 방법, 이 모든 것에 필요한 빌드 작업이나 기타 지원을 결정하는 작업은 WPF와 같은 프레임워크에서 수행됩니다.

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

  • Partial 클래스는 루트 요소를 지원하는 형식에서 파생되어야 합니다.

  • 태그 컴파일 빌드 작업의 기본 동작에 따라 코드 숨김 쪽의 partial 클래스 정의에서 파생을 비워 둘 수 있습니다. 컴파일된 결과에서는 페이지 루트의 지원 형식이 지정되지 않은 경우에도 partial 클래스의 기초가 된다고 가정합니다. 그러나 이 동작을 사용하는 것이 모범 사례는 아닙니다.

  • 코드 숨김에서 작성하는 이벤트 처리기는 인스턴스 메서드여야 하며 정적 메서드일 수 없습니다. 이 메서드는 x:Class로 식별되는 CLR 네임스페이스 내의 partial 클래스를 통해 정의해야 합니다. 다른 클래스 범위에서 이벤트 연결을 위한 이벤트 처리기를 찾도록 XAML 프로세서에 지시하기 위해 이벤트 처리기의 이름을 한정할 수는 없습니다.

  • 처리기는 지원 형식 시스템에서 적절한 이벤트에 대해 대리자를 일치시켜야 합니다.

  • 특히 Microsoft Visual Basic 언어의 경우 처리기를 XAML의 특성과 연결하는 대신 언어별 Handles 키워드를 사용하여 처리기를 처리기 선언의 인스턴스 및 이벤트와 연결할 수 있습니다. 그러나 이 기술에는 Handles 키워드가 특정 라우트된 이벤트 시나리오 또는 연결된 이벤트와 같은 WPF 이벤트 시스템의 특정 기능을 모두 지원할 수 없기 때문에 몇 가지 제한 사항이 있습니다. 자세한 내용은 Visual Basic 및 WPF 이벤트 처리를 참조하세요.

x:Code

x:Code는 XAML에 정의된 지시문 요소입니다. x:Code 지시문 요소에는 인라인 프로그래밍 코드가 포함될 수 있습니다. 인라인으로 정의된 코드는 동일한 페이지에서 XAML과 상호 작용할 수 있습니다. 다음 예에서는 인라인 C# 코드를 보여 줍니다. 코드는 x:Code 요소 내부에 있고 XML의 콘텐츠를 이스케이프하려면 코드를 <CDATA[...]]>으로 묶어야 합니다. 따라서 XAML 프로세서(XAML 스키마 또는 WPF 스키마 해석)는 콘텐츠를 문자 그대로 XML로 해석하려고 시도하지 않습니다.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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 생성 partial 클래스에 작성하고 기본 XML 네임스페이스 매핑만 사용할 수 있으므로 보다 기술적인 수준에서 인라인 코드용으로 작성하는 코드는 작성하기가 어려울 수 있습니다. using 문을 추가할 수 없기 때문에 수행하는 많은 API 호출을 완전히 한정해야 합니다. 기본 WPF 매핑에는 WPF 어셈블리에 있는 CLR 네임스페이스의 대부분이 포함되지만 전부는 아닙니다. 다른 CLR 네임스페이스 내에 포함된 형식 및 멤버에 대한 호출을 정규화해야 합니다. 또한 인라인 코드에서는 partial 클래스만 정의할 수 있으며, 참조하는 모든 사용자 코드 엔터티는 생성된 partial 클래스 내에서 멤버 또는 변수로 존재해야 합니다. 전역 변수나 빌드 변수에 대한 매크로 또는 #ifdef 같은 다른 언어 관련 프로그래밍 기능도 사용할 수 없습니다. 자세한 내용은 x:Code 내장 XAML 형식을 참조하세요.

참조