WPF의 코드 숨김 및 XAMLCode-Behind and XAML in WPF

코드 숨김은 태그 정의 된 개체와 결합 되는 코드를 설명 하는 데 사용 되는 용어는 경우는 XAMLXAML 태그 컴파일된 페이지는 합니다.Code-behind is a term used to describe the code that is joined with markup-defined objects, when a XAMLXAML page is markup-compiled. 이 항목에서는 코드에 대 한 대체 인라인 코드 메커니즘 및 코드 숨김에 대 한 요구 사항을 설명 XAMLXAML합니다.This topic describes requirements for code-behind as well as an alternative inline code mechanism for code in XAMLXAML.

이 항목에는 다음과 같은 단원이 포함되어 있습니다.This topic contains the following sections:

전제 조건Prerequisites

이 항목에서는 읽기는 XAML 개요 (WPF) 대 한 기본 지식이 있고는 CLRCLR 및 개체 지향 프로그래밍 합니다.This topic assumes that you have read the XAML Overview (WPF) and have some basic knowledge of the CLRCLR and object-oriented programming.

코드 숨김 및 XAML 언어Code-Behind and the XAML Language

XAML 언어 태그 파일 로부터 태그 파일을 코드 파일을 연결할 수 있도록 언어 수준 기능을 포함 합니다.The XAML language includes language-level features that make it possible to associate code files with markup files, from the markup file side. XAML 언어 언어 기능을 정의 하는 구체적으로, X:class 지시문, X:subclass 지시문, 및 X:classmodifier 지시문합니다.Specifically, the XAML language defines the language features x:Class Directive, x:Subclass Directive, and x:ClassModifier Directive. 정확히 어떻게 코드를 생성 하는 방법과 태그와 코드를 통합 하는 XAML 언어의 지정에 속하지 않습니다.Exactly how the code should be produced, and how to integrate markup and code, is not part of what the XAML language specifies. 코드를 통합 하는 방법을 결정 하는 WPF와 같은 프레임 워크 에서만 사용 하려면 XAML 응용 프로그램 및 프로그래밍 모델 및 빌드에 작업 또는 기타 지원 하는 방법 모두 필요 합니다.It is left up to frameworks such as WPF to determine how to integrate the code, how to use XAML in the application and programming models, and the build actions or other support that all this requires.

코드 숨김, 이벤트 처리기 및 WPF의 Partial 클래스 요구 사항Code-behind, Event Handler, and Partial Class Requirements in WPF

  • Partial 클래스는 루트 요소를 지 원하는 형식에서 파생 되어야 합니다.The partial class must derive from the type that backs the root element.

  • 태그 컴파일 빌드 작업의 기본 동작에 따라 비워 있습니다 파생 partial 클래스 정의에 빈 코드 숨김 측에서 note 합니다.Note that under the default behavior of the markup compile build actions, you can leave the derivation blank in the partial class definition on the code-behind side. 컴파일된 결과 지정 하지 않더라도 부분 클래스에 대 한 기본 클래스로 지원 형식 페이지 루트를 가정 합니다.The compiled result will assume the page root's backing type to be the basis for the partial class, even if it not specified. 그러나이 동작에 의존 하지 않습니다는 것이 좋습니다.However, relying on this behavior is not a best practice.

  • 코드 숨김에 작성 하는 이벤트 처리기 인스턴스 메서드여야 및 정적 메서드 일 수 없습니다.The event handlers you write in the code behind must be instance methods and cannot be static methods. 로 식별 되는 CLR 네임 스페이스 내에서 partial 클래스에서 이러한 메서드를 정의 해야 x:Class합니다.These methods must be defined by the partial class within the CLR namespace identified by x:Class. 지시 하기 위해 이벤트 처리기의 이름을 한정할 수 없습니다 한 XAMLXAML 프로세서가를 다른 클래스 범위에서 이벤트 연결에 대 한 이벤트 처리기를 찾도록 합니다.You cannot qualify the name of an event handler to instruct a XAMLXAML processor to look for an event handler for event wiring in a different class scope.

  • 처리기는 지원 형식 시스템의 적절 한 이벤트에 대 한 대리자를 일치 해야 합니다.The handler must match the delegate for the appropriate event in the backing type system.

  • Microsoft Visual Basic 언어에 대 한 특히 있습니다 사용할 수는 언어별 Handles 처리기 인스턴스 및 처리기 선언에서 특성을 사용 하 여 처리기를 연결 하는 대신에 이벤트와 연결할 키워드 XAMLXAML합니다.For the Microsoft Visual Basic language specifically, you can use the language-specific Handles keyword to associate handlers with instances and events in the handler declaration, instead of attaching handlers with attributes in XAMLXAML. 그러나이 기법에는 몇 가지 제한 때문에 Handles 키워드의 특정 기능을 모두 지원할 수 없는 WPFWPF 와 같은 특정 이벤트 시스템 라우트된 이벤트 시나리오 또는 연결 된 이벤트입니다.However, this technique does have some limitations because the Handles keyword cannot support all of the specific features of the WPFWPF event system, such as certain routed event scenarios or attached events. 자세한 내용은 참조 Visual Basic 및 WPF 이벤트 처리합니다.For details, see Visual Basic and WPF Event Handling.

x: 코드x:Code

X:code 지시문 요소에 정의 XAMLXAML합니다.x:Code is a directive element defined in XAMLXAML. x:Code 지시문 요소 인라인 프로그래밍 코드를 포함할 수 있습니다.An x:Code directive element can contain inline programming code. 인라인으로 정의 되는 코드와 상호 작용할 수는 XAMLXAML 동일한 페이지에 있습니다.The code that is defined inline can interact with the XAMLXAML on the same page. 다음 예제에서는 인라인 C# 코드를 보여 줍니다.The following example illustrates inline C# code. 코드 내에 있는 통지는 x:Code 요소와 코드로 묶어야 <CDATA[... ]]> 에 대 한 콘텐츠를 이스케이프 XMLXML되도록는 XAMLXAML 프로세서 (해석 중 하나는 XAMLXAML 스키마 또는 WPFWPF 스키마) 내용을 해석 하려고 시도 하지 것입니다로 XMLXML합니다.Notice that the code is inside the x:Code element and that the code must be surrounded by <CDATA[...]]> to escape the contents for XMLXML, so that a XAMLXAML processor (interpreting either the XAMLXAML schema or the WPFWPF schema) will not try to interpret the contents literally as XMLXML.

<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>

인라인 코드 제한 사항Inline Code Limitations

방지 하거나 인라인 코드의 사용을 제한 해야 합니다.You should consider avoiding or limiting the use of inline code. 아키텍처 및 코딩 원칙의 측면에서 태그 및 코드 숨김 분리 유지 디자이너와 개발자 역할 훨씬 더 분명 합니다.In terms of architecture and coding philosophy, maintaining a separation between markup and code-behind keeps the designer and developer roles much more distinct. 자세한 기술 수준에 대해 인라인 코드를 작성 하는 코드 좋지 않을 수 있습니다를 작성 하려면에 항상 작성 하기 때문에 XAMLXAML partial 클래스를 생성 하 고 기본 XML 네임 스페이스 매핑을 사용할 수 있습니다.On a more technical level, the code that you write for inline code can be awkward to write, because you are always writing into the XAMLXAML generated partial class, and can only use the default XML namespace mappings. 추가할 수 없으므로 using 문을 정규화 해야 다양 한는 APIAPI 설정한 호출 합니다.Because you cannot add using statements, you must fully qualify many of the APIAPI calls that you make. 기본 WPFWPF 매핑에 포함 전부는 아니지만 가장 CLRCLR 에 있는 네임 스페이스는 WPFWPF 어셈블리; 형식 및 다른 CLR 네임 스페이스 내에 포함 된 멤버에 대 한 호출을 정규화 해야 합니다.The default WPFWPF mappings include most but not all CLRCLR namespaces that are present in the WPFWPF assemblies; you will have to fully qualify calls to types and members contained within the other CLR namespaces. 또한 정의할 수 없습니다 것 partial 클래스 이외에 다른 인라인 코드에 및 멤버 또는 생성 된 partial 클래스 내에서 변수로 참조 하는 모든 사용자 코드 엔터티 존재 해야 합니다.You also cannot define anything beyond the partial class in the inline code, and all user code entities you reference must exist as a member or variable within the generated partial class. 다른 특정 프로그래밍 같은 언어 기능이 매크로 또는 #ifdef 전역 변수 또는 빌드 변수에 대 한는 사용할 수 없습니다.Other language specific programming features, such as macros or #ifdef against global variables or build variables, are also not available. 자세한 내용은 참조 X:code 내장 XAML 형식합니다.For more information, see x:Code Intrinsic XAML Type.

참고 항목See Also

XAML 개요(WPF)XAML Overview (WPF)
x:Code 내장 XAML 형식x:Code Intrinsic XAML Type
WPF 응용 프로그램 빌드Building a WPF Application
XAML 구문 정보XAML Syntax In Detail