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 형식을 참조하세요.
참조
.NET Desktop feedback