코드 비하인드는 XAML 페이지가 태그 컴파일되는 경우 태그로 정의된 개체와 결합된 코드를 설명하는 데 사용되는 용어입니다. 이 항목에서는 코드 숨김에 대한 요구 사항과 XAML의 코드에 대한 대체 인라인 코드 메커니즘을 설명합니다.
이 항목에는 다음 섹션이 포함되어 있습니다.
Code-Behind 및 XAML 언어
인라인 코드 제한 사항
필수 조건
이 항목에서는 WPF의 XAML을 읽었으며 CLR 및 객체 지향 프로그래밍에 대한 기본적인 지식을 가지고 있다고 가정합니다.
코드 비하인드 및 XAML 언어
XAML 언어에는 태그 파일 쪽에서 코드 파일을 태그 파일과 연결할 수 있도록 하는 언어 수준 기능이 포함됩니다. 특히 XAML 언어는 언어 기능인 x:Class 지시문, x:Subclass 지시문, x:ClassModifier 지시문을 정의합니다. 정확히 코드를 생성하는 방법과 태그 및 코드를 통합하는 방법은 XAML 언어가 지정하는 항목에 포함되지 않습니다. 코드를 통합하는 방법, 애플리케이션 및 프로그래밍 모델에서 XAML을 사용하는 방법, 이 모든 것에 필요한 빌드 작업이나 기타 지원을 결정하는 작업은 WPF와 같은 프레임워크에서 수행됩니다.
WPF의 코드 숨김, 이벤트 처리기 및 파셜 클래스 요구 사항
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 형식을 참조하세요.
참고하십시오
- WPF XAML
- x:Code 내재 XAML 유형
- WPF 애플리케이션 구축
- XAML 구문 정보
.NET Desktop feedback