XAML 개요XAML overview

이 문서에서는 Windows 런타임 app developer 사용자를 위한 XAML 언어 및 XAML 개념을 소개 하 고, 개체를 선언 하 고 특성을 설정 하는 다양 한 방법에 대해 설명 합니다 .이는 Windows 런타임 앱을 만드는 데 사용 됩니다.This article introduces the XAML language and XAML concepts to the Windows Runtime app developer audience, and describes the different ways to declare objects and set attributes in XAML as it is used for creating a Windows Runtime app.

XAML이란?What is XAML?

Extensible Application Markup Language (XAML)은 선언적 언어입니다.Extensible Application Markup Language (XAML) is a declarative language. 특히 XAML은 여러 개체 간의 계층 관계를 보여 주는 언어 구조와 형식의 확장을 지 원하는 지원 형식 규칙을 사용 하 여 개체를 초기화 하 고 개체의 속성을 설정할 수 있습니다.Specifically, XAML can initialize objects and set properties of objects using a language structure that shows hierarchical relationships between multiple objects and a backing type convention that supports extension of types. 선언적 XAML 태그에 표시 되는 UI 요소를 만들 수 있습니다.You can create visible UI elements in the declarative XAML markup. 그런 다음 이벤트에 응답할 수 있는 각 XAML 파일에 대해 별도의 코드 숨겨진 파일을 연결 하 고 원래 XAML에서 선언한 개체를 조작할 수 있습니다.You can then associate a separate code-behind file for each XAML file that can respond to events and manipulate the objects that you originally declare in XAML.

XAML 언어는 디자인 도구와 IDE (대화형 개발 환경) 사이 또는 기본 개발자와 지역화 개발자 간에 XAML 소스를 교환 하는 것과 같이 개발 프로세스에서 다양 한 도구와 역할 간의 소스 교환을 지원 합니다.The XAML language supports interchange of sources between different tools and roles in the development process, such as exchanging XAML sources between design tools and an interactive development environment (IDE) or between primary developers and localization developers. XAML을 교환 형식으로 사용 하면 디자이너 역할과 개발자 역할을 분리 하거나 함께 사용할 수 있으며, 디자이너와 개발자는 앱 프로덕션 중에 반복 될 수 있습니다.By using XAML as the interchange format, designer roles and developer roles can be kept separate or brought together, and designers and developers can iterate during the production of an app.

Windows 런타임 앱 프로젝트의 일부로 표시 되는 경우 XAML 파일은 .xaml 파일 이름 확장명을 사용 하는 XML 파일입니다.When you see them as part of your Windows Runtime app projects, XAML files are XML files with the .xaml file name extension.

기본 XAML 구문Basic XAML syntax

XAML에는 XML을 기반으로 하는 기본 구문이 있습니다.XAML has a basic syntax that builds on XML. 정의에 따라 유효한 XAML도 유효한 XML 이어야 합니다.By definition, valid XAML must also be valid XML. 그러나 XAML에는 XML 1.0 사양에 따라 XML에서 유효 하지만 다른 모든 의미를 할당 하는 구문 개념도 있습니다.But XAML also has syntax concepts that are assigned a different and more complete meaning while still being valid in XML per the XML 1.0 specification. 예를 들어 XAML은 속성 요소 구문을지원 합니다. 여기서 속성 값은 특성의 문자열 값 이나 콘텐츠로 설정 되는 것이 아니라 요소 내에서 설정 될 수 있습니다.For example, XAML supports property element syntax, where property values can be set within elements rather than as string values in attributes or as content. 일반 XML로 XAML 속성 요소는 이름에 점이 있는 요소 이므로 일반 XML에 유효 하지만 동일한 의미를 갖지 않습니다.To regular XML, a XAML property element is an element with a dot in its name, so it's valid to plain XML but doesn't have the same meaning.

XAML 및 Visual StudioXAML and Visual Studio

Microsoft Visual Studio를 사용 하면 XAML 텍스트 편집기와 그래픽으로 표현 되는 XAML 디자인 화면에서 유효한 XAML 구문을 생성할 수 있습니다.Microsoft Visual Studio helps you to produce valid XAML syntax, both in the XAML text editor and in the more graphically oriented XAML design surface. Visual Studio를 사용 하 여 앱에 대 한 XAML을 작성 하는 경우 각 키 입력에 구문에 대해 너무 많은 걱정 하지 마세요.When you write XAML for your app using Visual Studio, don't worry too much about the syntax with each keystroke. IDE는 자동 완성 힌트를 제공 하 여 유효한 XAML 구문을 권장 합니다 .이 힌트를 통해 Microsoft IntelliSense 목록 및 드롭다운의 제안 사항을 표시 하 고 도구 상자 창에 UI 요소 라이브러리를 표시 하거나 기타 기술을 사용할 것입니다.The IDE encourages valid XAML syntax by providing autocompletion hints, showing suggestions in Microsoft IntelliSense lists and dropdowns, showing UI element libraries in the Toolbox window, or other techniques. XAML을 사용 하는 첫 번째 환경인 경우 참조 또는 다른 토픽에서 XAML 구문을 설명 하는 경우 제한 사항 또는 선택 항목을 설명 하는 데 종종 사용 되는 용어와 구문 규칙을 알고 있는 것이 유용할 수 있습니다.If this is your first experience with XAML, it might still be useful to know the syntax rules and particularly the terminology that is sometimes used to describe the restrictions or choices when describing XAML syntax in reference or other topics. XAML 구문에 대 한 자세한 내용은 별도 항목인 xaml 구문 가이드에서 설명 합니다.The fine points of XAML syntax are covered in a separate topic, XAML syntax guide.

XAML 네임 스페이스XAML namespaces

일반적인 프로그래밍에서 네임 스페이스는 프로그래밍 엔터티에 대 한 식별자가 해석 되는 방법을 결정 하는 구성 개념입니다.In general programming, a namespace is an organizing concept that determines how identifiers for programming entities are interpreted. 프로그래밍 프레임 워크는 네임 스페이스를 사용 하 여 사용자가 선언한 식별자를 프레임 워크 선언 식별자에서 분리 하 고, 네임 스페이스 한정자를 통해 식별자를 명확 하 게 구분 하 고, 범위 지정 규칙을 적용할 수 있습니다.By using namespaces, a programming framework can separate user-declared identifiers from framework-declared identifiers, disambiguate identifiers through namespace qualifications, enforce rules for scoping names, and so on. XAML에는 XAML 언어에 대해이 용도로 사용 되는 자체 XAML 네임 스페이스 개념이 있습니다.XAML has its own XAML namespace concept that serves this purpose for the XAML language. 다음은 XAML이 XML 언어 네임 스페이스 개념을 적용 하 고 확장 하는 방법입니다.Here's how XAML applies and extends the XML language namespace concepts:

  • XAML은 네임 스페이스 선언에 대해 예약 된 XML 특성 xmlns 를 사용 합니다.XAML uses the reserved XML attribute xmlns for namespace declarations. 특성의 값은 일반적으로 XML에서 상속 되는 규칙 인 URI (Uniform Resource Identifier)입니다.The value of the attribute is typically a Uniform Resource Identifier (URI), which is a convention inherited from XML.
  • XAML은 선언에서 접두사를 사용 하 여 기본이 아닌 네임 스페이스를 선언 하 고, 요소 및 특성에서 접두사 사용은 해당 네임 스페이스를 참조 합니다.XAML uses prefixes in declarations to declare non-default namespaces, and prefix usages in elements and attributes reference that namespace.
  • XAML에는 사용 또는 선언에 접두사가 없는 경우 사용 되는 네임 스페이스인 기본 네임 스페이스의 개념이 있습니다.XAML has a concept of a default namespace, which is the namespace used when no prefix exists in a usage or declaration. 각 XAML 프로그래밍 프레임 워크에 대해 기본 네임 스페이스를 다르게 정의할 수 있습니다.The default namespace can be defined differently for each XAML programming framework.
  • 네임 스페이스 정의는 부모 요소에서 자식 요소로 XAML 파일이 나 구문에서 상속 됩니다.Namespace definitions inherit in a XAML file or construct, from parent element to child element. 예를 들어 XAML 파일의 루트 요소에서 네임 스페이스를 정의 하는 경우 해당 파일 내의 모든 요소는 해당 네임 스페이스 정의를 상속 합니다.For example, if you define a namespace in the root element of a XAML file, all elements within that file inherit that namespace definition. 페이지에 추가 된 요소가 네임 스페이스를 다시 정의 하는 경우 해당 요소의 하위 항목은 새 정의를 상속 합니다.If an element further into the page redefines the namespace, that element's descendants inherit the new definition.
  • 요소의 특성은 요소의 네임 스페이스를 상속 합니다.Attributes of an element inherit the element's namespaces. XAML 특성에 접두사를 표시 하는 것은 일반적이 지 않습니다.It's fairly uncommon to see prefixes on XAML attributes.

XAML 파일은 거의 항상 루트 요소에서 기본 XAML 네임 스페이스를 선언 합니다.A XAML file almost always declares a default XAML namespace in its root element. 기본 XAML 네임 스페이스는 접두사를 사용 하 여 한정 하지 않고 선언할 수 있는 요소를 정의 합니다.The default XAML namespace defines which elements you can declare without qualifying them by a prefix. 일반적인 Windows 런타임 앱 프로젝트의 경우이 기본 네임 스페이스에는 UI 정의에 사용 되는 Windows 런타임에 대 한 모든 기본 제공 XAML 용어 (기본 컨트롤, 텍스트 요소, XAML 그래픽 및 애니메이션, 데이터 바인딩 및 스타일 지원 형식)가 포함 되어 있습니다.For typical Windows Runtime app projects, this default namespace contains all the built-in XAML vocabulary for the Windows Runtime that's used for UI definitions: the default controls, text elements, XAML graphics and animations, databinding and styling support types, and so on. 따라서 Windows 런타임 apps에 대해 작성 하는 대부분의 XAML은 일반적인 UI 요소를 참조할 때 XAML 네임 스페이스 및 접두사를 사용 하지 않도록 할 수 있습니다.Most of the XAML you'll write for Windows Runtime apps will thus be able to avoid using XAML namespaces and prefixes when referring to common UI elements.

다음은 앱에 대 한 초기 페이지의 템플릿 생성 루트를 표시 하는 코드 조각입니다 Page (여는 태그와 단순화 된 태그 표시).Here's a snippet that shows a template-created Page root of the initial page for an app (showing the opening tag only, and simplified). 기본 네임 스페이스와 x 네임 스페이스 (다음에 설명)를 선언 합니다.It declares the default namespace and also the x namespace (which we'll explain next).

<Page
    x:Class="Application1.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>

XAML 언어 XAML 네임 스페이스입니다.The XAML-language XAML namespace

거의 모든 Windows 런타임 XAML 파일에서 선언 된 하나의 특정 XAML 네임 스페이스는 XAML 언어 네임 스페이스입니다.One particular XAML namespace that is declared in nearly every Windows Runtime XAML file is the XAML-language namespace. 이 네임 스페이스는 XAML 언어 사양에 정의 된 요소와 개념을 포함 합니다.This namespace includes elements and concepts that are defined by the XAML language specification. 규칙에 따라 XAML 언어 XAML 네임 스페이스는 접두사 "x"에 매핑됩니다.By convention, the XAML-language XAML namespace is mapped to the prefix "x". Windows 런타임 app 프로젝트에 대 한 기본 프로젝트 및 파일 템플릿은 항상 기본 XAML 네임 스페이스 (접두사 없음 xmlns= )와 xaml 언어 xaml 네임 스페이스 (접두사 "x")를 루트 요소의 일부로 정의 합니다.The default project and file templates for Windows Runtime app projects always define both the default XAML namespace (no prefix, just xmlns=) and the XAML-language XAML namespace (prefix "x") as part of the root element.

"X" 접두사/x m l-언어 XAML 네임 스페이스에는 XAML에서 자주 사용 하는 여러 프로그래밍 구문이 포함 되어 있습니다.The "x" prefix/XAML-language XAML namespace contains several programming constructs that you use often in your XAML. 가장 일반적인 항목은 다음과 같습니다.Here are the most common ones:

용어Term DescriptionDescription
x:Keyx:Key XAML의 각 리소스에 대 한 고유한 사용자 정의 키를 설정 합니다 ResourceDictionary .Sets a unique user-defined key for each resource in a XAML ResourceDictionary. 키의 토큰 문자열은 StaticResource 태그 확장에 대 한 인수 이며, 나중에이 키를 사용 하 여 앱 xaml의 다른 곳에 있는 다른 xaml 사용에서 xaml 리소스를 검색 합니다.The key's token string is the argument for the StaticResource markup extension, and you use this key later to retrieve the XAML resource from another XAML usage elsewhere in your app's XAML.
x:Classx:Class XAML 페이지에 대 한 코드를 제공 하는 클래스의 코드 네임 스페이스와 코드 클래스 이름을 지정 합니다.Specifies the code namespace and code class name for the class that provides code-behind for a XAML page. 그러면 응용 프로그램을 빌드할 때 빌드 작업에 의해 만들어지거나 조인 된 클래스의 이름이 표시 됩니다.This names the class that is created or joined by the build actions when you build your app. 이러한 빌드 작업은 XAML 태그 컴파일러를 지원 하 고 앱이 컴파일될 때 태그와 코드를 결합 합니다.These build actions support the XAML markup compiler and combine your markup and code-behind when the app is compiled. XAML 페이지의 코드 숨김으로 지원 하려면 이러한 클래스가 있어야 합니다.You must have such a class to support code-behind for a XAML page. Window.Content 기본 Windows 런타임 활성화 모델에 있습니다.Window.Content in the default Windows Runtime activation model.
x:Namex:Name XAML로 정의 된 개체 요소가 처리 된 후 런타임 코드에 있는 인스턴스의 런타임 개체 이름을 지정 합니다.Specifies a run-time object name for the instance that exists in run-time code after an object element defined in XAML is processed. 코드에서 명명 된 변수를 선언 하는 것 처럼 XAML에서 x:Name 을 설정 한다고 생각할 수 있습니다.You can think of setting x:Name in XAML as being like declaring a named variable in code. 나중에 살펴보겠습니다 .이는 XAML이 Windows 런타임 앱의 구성 요소로 로드 될 때 발생 하는 것입니다.As you'll learn later, that's exactly what happens when your XAML is loaded as a component of a Windows Runtime app.
참고 Name 는 프레임 워크에서 유사한 속성 이지만 일부 요소는이를 지원 하지 않습니다.Note Name is a similar property in the framework, but not all elements support it. 해당 요소 형식에서 FrameworkElement.Name 가 지원 되지 않을 때마다 요소 식별에 대해 x:Name 을 사용 합니다.Use x:Name for element identification whenever FrameworkElement.Name is not supported on that element type.
x:Uidx:Uid 일부 속성 값에 지역화 된 리소스를 사용 해야 하는 요소를 식별 합니다.Identifies elements that should use localized resources for some of their property values. X:Uid를 사용 하는 방법에 대 한 자세한 내용은 빠른 시작: UI 리소스 번역을 참조 하세요.For more info on how to use x:Uid, see Quickstart: Translating UI resources.
XAML 기본 데이터 형식XAML intrinsic data types 이러한 형식은 특성이 나 리소스에 필요한 경우 단순 값 형식에 대 한 값을 지정할 수 있습니다.These types can specify values for simple value-types when that's required for an attribute or resource. 이러한 내장 형식은 일반적으로 각 프로그래밍 언어의 내장 정의의 일부로 정의 되는 단순 값 형식에 해당 합니다.These intrinsic types correspond to the simple value types that are typically defined as part of each programming language's intrinsic definitions. 예를 들어 storyboarded 시각적 상태에서 사용할 진정한 부울 값을 나타내는 개체가 필요할 수 있습니다 ObjectAnimationUsingKeyFrames .For example, you might need an object representing a true Boolean value to use in an ObjectAnimationUsingKeyFrames storyboarded visual state. XAML의 해당 값에 대해 다음과 같이 X:boolean 내장 형식을 object 요소로 사용 합니다. <x:Boolean>True</x:Boolean>For that value in XAML, you'd use the x:Boolean intrinsic type as the object element, like this: <x:Boolean>True</x:Boolean>

XAML 언어 XAML 네임 스페이스의 다른 프로그래밍 생성자가 있지만 일반적인 것은 아닙니다.Other programming constructs in the XAML-language XAML namespace exist but are not as common.

XAML 네임 스페이스에 사용자 지정 형식 매핑Mapping custom types to XAML namespaces

XAML의 가장 강력한 기능 중 하나는 Windows 런타임 앱에 대 한 XAML 어휘를 쉽게 확장할 수 있다는 것입니다.One of the most powerful aspects of XAML as a language is that it's easy to extend the XAML vocabulary for your Windows Runtime apps. 앱의 프로그래밍 언어에서 고유한 사용자 지정 형식을 정의한 다음 XAML 태그에서 사용자 지정 형식을 참조할 수 있습니다.You can define your own custom types in your app's programming language and then reference your custom types in XAML markup. 사용자 지정 형식을 통한 확장 지원은 XAML 언어의 작동 방식에 기본적으로 제공 됩니다.Support for extension through custom types is fundamentally built-in to how the XAML language works. 프레임 워크 또는 앱 개발자는 XAML에서 참조 하는 지원 개체를 만들어야 합니다.Frameworks or app developers are responsible for creating the backing objects that XAML references. 프레임 워크와 앱 개발자는 모두 기본 XAML 구문 규칙을 의미 하거나 그 외의 어휘 개체의 사양에 따라 바인딩됩니다.Neither frameworks nor the app developer are bound by specifications of what the objects in their vocabularies represent or do beyond the basic XAML syntax rules. XAML 언어 XAML 네임 스페이스 형식에 대 한 몇 가지 기대 사항이 있지만 Windows 런타임에서는 필요한 모든 지원을 제공 합니다.(There are some expectations of what the XAML-language XAML namespace types should do, but the Windows Runtime provides all the necessary support.)

Windows 런타임 core 라이브러리 및 메타 데이터 이외의 라이브러리에서 제공 되는 형식에 대해 XAML을 사용 하는 경우에는 접두사를 사용 하 여 XAML 네임 스페이스를 선언 하 고 매핑해야 합니다.If you use XAML for types that come from libraries other than the Windows Runtime core libraries and metadata, you must declare and map a XAML namespace with a prefix. 요소 사용에서 해당 접두사를 사용 하 여 라이브러리에 정의 된 형식을 참조 합니다.Use that prefix in element usages to reference the types that were defined in your library. 접두사 매핑은 일반적으로 루트 요소에서 다른 XAML 네임 스페이스 정의와 함께 xmlns 특성으로 선언 합니다.You declare prefix mappings as xmlns attributes, typically in a root element along with the other XAML namespace definitions.

사용자 지정 형식을 참조 하는 고유한 네임 스페이스 정의를 만들려면 먼저 xmlns: 키워드와 원하는 접두사를 지정 합니다.To make your own namespace definition that references custom types, you first specify the keyword xmlns:, then the prefix you want. 이 특성의 값에는 값의 첫 번째 부분으로 using: 키워드가 포함되어 있어야 합니다.The value of that attribute must contain the keyword using: as the first part of the value. 값의 나머지 부분은 사용자 지정 형식이 포함 된 특정 코드 지원 네임 스페이스를 이름으로 참조 하는 문자열 토큰입니다.The remainder of the value is a string token that references the specific code-backing namespace that contains your custom types, by name.

접두사는 해당 XAML 파일의 나머지 태그에서 XAML 네임 스페이스를 참조 하는 데 사용 되는 태그 토큰을 정의 합니다.The prefix defines the markup token that is used to refer to that XAML namespace in the remainder of the markup in that XAML file. 콜론 문자 (:) 는 XAML 네임 스페이스 내에서 참조 되는 접두사와 엔터티 사이를 이동 합니다.A colon character (:) goes between the prefix and the entity to be referenced within the XAML namespace.

예를 들어 접두사를 네임 스페이스에 매핑하는 특성 구문은 다음과 같습니다. myTypes myCompany.myTypes xmlns:myTypes="using:myCompany.myTypes" 대표적인 요소 사용은 다음과 같습니다. <myTypes:CustomButton/>For example, the attribute syntax to map a prefix myTypes to the namespace myCompany.myTypes is: xmlns:myTypes="using:myCompany.myTypes", and a representative element usage is: <myTypes:CustomButton/>

Visual C++ 구성 요소 확장에 대 한 특별 고려 사항 (c + +/CX)을 비롯 하 여 사용자 지정 형식에 대 한 XAML 네임 스페이스 매핑에 대 한 자세한 내용은 xaml 네임 스페이스 및 네임 스페이스 매핑For more info on mapping XAML namespaces for custom types, including special considerations for Visual C++ component extensions (C++/CX), see XAML namespaces and namespace mapping.

다른 XAML 네임 스페이스Other XAML namespaces

접두사 "d" (디자이너 네임 스페이스의 경우) 및 "mc" (태그 호환성)를 정의 하는 XAML 파일이 종종 표시 됩니다.You often see XAML files that define the prefixes "d" (for designer namespace) and "mc" (for markup compatibility). 일반적으로이는 인프라 지원을 위한 것 이거나 디자인 타임 도구에서 시나리오를 사용 하도록 설정 하는 것입니다.Generally, these are for infrastructure support or to enable scenarios in a design-time tool. 자세한 내용은 xaml 네임 스페이스 항목의 "다른 xaml 네임 스페이스" 섹션을 참조 하세요.For more info, see the "Other XAML namespaces" section of the XAML namespaces topic.

태그 확장Markup extensions

태그 확장은 Windows 런타임 XAML 구현에서 자주 사용 되는 XAML 언어 개념입니다.Markup extensions are a XAML language concept that is often used in the Windows Runtime XAML implementation. 태그 확장은 종종 지원 형식을 기반으로 요소를 선언 하는 것이 아니라 XAML 파일이 값 또는 동작에 액세스할 수 있도록 하는 일종의 "바로 가기"를 나타냅니다.Markup extensions often represent some kind of "shortcut" that enables a XAML file to access a value or behavior that isn't simply declaring elements based on backing types. 일부 태그 확장은 구문을 간소화 하거나 다른 XAML 파일 간의 팩터링을 목표로 하 여 일반 문자열이 나 추가적으로 중첩 된 요소를 사용 하 여 속성을 설정할 수 있습니다.Some markup extensions can set properties with plain strings or with additionally nested elements, with the goal of streamlining the syntax or the factoring between different XAML files.

XAML 특성 구문에서 중괄호 "{"와 "}"는 XAML 태그 확장 사용을 의미 합니다.In XAML attribute syntax, curly braces "{" and "}" indicate a XAML markup extension usage. 이 사용법은 특성 값을 리터럴 문자열 또는 직접 문자열 변환 가능 값으로 처리 하는 일반적인 처리에서 이스케이프 되도록 XAML 처리를 보냅니다.This usage directs the XAML processing to escape from the general treatment of treating attribute values as either a literal string or a directly string-convertible value. 대신 XAML 파서는 특정 태그 확장에 대 한 동작을 제공 하는 코드를 호출 하 고,이 코드는 XAML 파서에서 필요로 하는 대체 개체 또는 동작 결과를 제공 합니다.Instead, a XAML parser calls code that provides behavior for that particular markup extension, and that code provides an alternate object or behavior result that the XAML parser needs. 태그 확장은 태그 확장 이름 뒤에 오는 인수를 포함할 수 있으며 중괄호 안에도 포함 됩니다.Markup extensions can have arguments, which follow the markup extension name and are also contained within the curly braces. 일반적으로 평가 된 태그 확장은 개체 반환 값을 제공 합니다.Typically, an evaluated markup extension provides an object return value. 구문 분석 중에이 반환 값은 소스 XAML에서 태그 확장 사용이 있었던 개체 트리의 위치에 삽입 됩니다.During parsing, that return value is inserted into the position in the object tree where the markup extension usage was in the source XAML.

Windows 런타임 XAML은 기본 XAML 네임 스페이스 아래에 정의 되 고 Windows 런타임 XAML 파서에서 인식 되는 이러한 태그 확장을 지원 합니다.Windows Runtime XAML supports these markup extensions that are defined under the default XAML namespace and are understood by the Windows Runtime XAML parser:

  • {X:bind}: 컴파일 시간에 생성 되는 특수 한 용도의 코드를 실행 하 여 런타임 시까지 속성 평가를 지연 하는 데이터 바인딩을 지원 합니다.{x:Bind}: supports data binding, which defers property evaluation until run-time by executing special-purpose code, which it generates at compile-time. 이 태그 확장은 다양 한 범위의 인수를 지원 합니다.This markup extension supports a wide range of arguments.
  • {Binding}: 일반 용도의 런타임 개체 검사를 실행 하 여 런타임 시까지 속성 평가를 지연 하는 데이터 바인딩을 지원 합니다.{Binding}: supports data binding, which defers property evaluation until run-time by executing general-purpose runtime object inspection. 이 태그 확장은 다양 한 범위의 인수를 지원 합니다.This markup extension supports a wide range of arguments.
  • {StaticResource}:에 정의 된 리소스 값 참조를 지원 ResourceDictionary 합니다.{StaticResource}: supports referencing resource values that are defined in a ResourceDictionary. 이러한 리소스는 다른 XAML 파일에 있을 수 있지만 궁극적으로는 로드 시 XAML 파서가 검색할 수 있어야 합니다.These resources can be in a different XAML file but must ultimately be findable by the XAML parser at load time. 사용의 인수는 {StaticResource} 에서 키가 지정 된 리소스의 키 (이름)를 식별 합니다 ResourceDictionary .The argument of a {StaticResource} usage identifies the key (the name) for a keyed resource in a ResourceDictionary.
  • {Themeresource}: {StaticResource} 와 비슷하지만 런타임 테마 변경 내용에 응답할 수 있습니다.{ThemeResource}: similar to {StaticResource} but can respond to run-time theme changes. 대부분의 이러한 템플릿은 앱이 실행 되는 동안 테마를 전환 하는 사용자와의 호환성을 위해 디자인 되었기 때문에, Windows 런타임 기본 XAML 템플릿에서 매우 자주 나타납니다.{ThemeResource} appears quite often in the Windows Runtime default XAML templates, because most of these templates are designed for compatibility with the user switching the theme while the app is running.
  • {TemplateBinding}: XAML의 컨트롤 템플릿과 런타임에 최종 사용을 지 원하는 {Binding} 의 특수 한 경우입니다.{TemplateBinding}: a special case of {Binding} that supports control templates in XAML and their eventual usage at run time.
  • {RelativeSource}: 템플릿 기반 부모에서 값이 제공 되는 특정 형식의 템플릿 바인딩을 사용 하도록 설정 합니다.{RelativeSource}: enables a particular form of template binding where values come from the templated parent.
  • {Customresource}: 고급 리소스 조회 시나리오에 적합 합니다.{CustomResource}: for advanced resource lookup scenarios.

Windows 런타임는 {X:null} 태그 확장도 지원 합니다.Windows Runtime also supports the {x:Null} markup extension. 이를 사용 하 여 XAML에서 Nullable 값을 null 로 설정 합니다.You use this to set Nullable values to null in XAML. 예를 들어,에 대 한 컨트롤 템플릿에서이를 사용할 수 있습니다 .이는 CheckBox null 을 확정 되지 않은 선택 상태 ("결정 되지 않은" 시각적 상태를 트리거하기)로 해석 합니다.For example you might use this in a control template for a CheckBox, which interprets null as an indeterminate check state (triggering the "Indeterminate" visual state).

일반적으로 태그 확장은 응용 프로그램에 대 한 개체 그래프의 다른 부분에서 기존 인스턴스를 반환 하거나 런타임에 값을 지연 시킵니다.A markup extension generally returns an existing instance from some other part of the object graph for the app or defers a value to run time. 일반적으로 사용 되는 특성 값으로 태그 확장을 사용할 수 있기 때문에 속성 요소 구문이 필요 하지 않을 수 있는 참조 형식 속성에 대 한 값을 제공 하는 태그 확장을 종종 볼 수 있습니다.Because you can use a markup extension as an attribute value, and that's the typical usage, you often see markup extensions providing values for reference-type properties that might have otherwise required a property element syntax.

예를 들어에서 다시 사용할 수 있는를 참조 하는 구문은 Style ResourceDictionary 다음과 같습니다 <Button Style="{StaticResource SearchButtonStyle}"/> .For example, here's the syntax for referencing a reusable Style from a ResourceDictionary: <Button Style="{StaticResource SearchButtonStyle}"/>. Style 단순 값이 아닌 참조 형식 이므로 사용 하지 않으면 속성 {StaticResource} 요소와 속성을 설정 하는 데 필요한 <Button.Style> <Style> 정의가 필요 FrameworkElement.Style 합니다.A Style is a reference type, not a simple value, so without the {StaticResource} usage, you would've needed a <Button.Style> property element and a <Style> definition within it to set the FrameworkElement.Style property.

태그 확장을 사용 하면 XAML에서 설정할 수 있는 모든 속성을 특성 구문에서 설정할 수 있습니다.By using markup extensions, every property that is settable in XAML is potentially settable in attribute syntax. 직접 개체 인스턴스화에 대한 특성 구문을 지원하지 않더라도 특성 구문을 사용하여 속성에 대한 참조 값을 제공할 수 있습니다.You can use attribute syntax to provide reference values for a property even if it doesn't otherwise support an attribute syntax for direct object instantiation. 또는 XAML 속성이 값 형식으로 채워지거나 새로 생성 된 참조 형식에 의해 채워지는 일반적인 요구 사항을 연기 하는 특정 동작을 사용 하도록 설정할 수 있습니다.Or you can enable specific behavior that defers the general requirement that XAML properties be filled by value types or by newly created reference types.

다음 XAML 예제에서는 FrameworkElement.Style 특성 구문을 사용 하 여의 속성 값을 설정 하는 방법을 보여 줍니다 Border .To illustrate, the next XAML example sets the value of the FrameworkElement.Style property of a Border by using attribute syntax. FrameworkElement.Style속성은 클래스의 인스턴스를 사용 하며 Windows.UI.Xaml.Style , 기본적으로 특성 구문 문자열을 사용 하 여 만들 수 없는 참조 형식입니다.The FrameworkElement.Style property takes an instance of the Windows.UI.Xaml.Style class, a reference type that by default could not be created using an attribute syntax string. 하지만 이 경우 특성은 특정 태그 확장인 StaticResource를 참조합니다.But in this case, the attribute references a particular markup extension, StaticResource. 태그 확장이 처리 될 때 리소스 사전에서 키가 지정 된 리소스로 이전에 정의 된 스타일 요소에 대 한 참조를 반환 합니다.When that markup extension is processed, it returns a reference to a Style element that was defined earlier as a keyed resource in a resource dictionary.

<Canvas.Resources>
  <Style TargetType="Border" x:Key="PageBackground">
    <Setter Property="BorderBrush" Value="Blue"/>
    <Setter Property="BorderThickness" Value="5"/>
  </Style>
</Canvas.Resources>
...
<Border Style="{StaticResource PageBackground}">
  ...
</Border>

태그 확장을 중첩할 수 있습니다.You can nest markup extensions. 가장 안쪽의 태그 확장이 먼저 계산됩니다.The innermost markup extension is evaluated first.

태그 확장으로 인해 특성에서 리터럴 "{" 값에 대 한 특수 구문이 필요 합니다.Because of markup extensions, you need special syntax for a literal "{" value in an attribute. 자세한 내용은 XAML 구문 가이드를 참조 하세요.For more info see XAML syntax guide.

이벤트Events

XAML은 개체 및 해당 속성에 대 한 선언적 언어 이지만 태그의 개체에 이벤트 처리기를 연결 하는 구문도 포함 됩니다.XAML is a declarative language for objects and their properties, but it also includes a syntax for attaching event handlers to objects in the markup. 그런 다음 XAML 이벤트 구문은 Windows 런타임 프로그래밍 모델을 통해 XAML 선언 이벤트를 통합할 수 있습니다.The XAML event syntax can then integrate the XAML-declared events through the Windows Runtime programming model. 이벤트가 처리 되는 개체의 특성 이름으로 이벤트 이름을 지정 합니다.You specify the name of the event as an attribute name on the object where the event is handled. 특성 값의 경우 코드에서 정의 하는 이벤트 처리기 함수의 이름을 지정 합니다.For the attribute value, you specify the name of an event-handler function that you define in code. XAML 프로세서는이 이름을 사용 하 여 로드 된 개체 트리에서 대리자 표현을 만들고 지정 된 처리기를 내부 처리기 목록에 추가 합니다.The XAML processor uses this name to create a delegate representation in the loaded object tree, and adds the specified handler to an internal handler list. 거의 모든 Windows 런타임 앱은 태그와 코드 숨김이 있는 소스 모두에 의해 정의 됩니다.Nearly all Windows Runtime apps are defined by both markup and code-behind sources.

다음은 간단한 예제입니다.Here's a simple example. Button클래스는 이라는 이벤트를 지원 Click 합니다.The Button class supports an event named Click. 사용자가 단추를 클릭 한 후에 호출 해야 하는 코드를 실행 하는 클릭 에 대 한 처리기를 작성할 수 있습니다.You can write a handler for Click that runs code that should be invoked after the user clicks the Button. XAML에서 단추에 대 한 클릭 을 특성으로 지정 합니다.In XAML, you specify Click as an attribute on the Button. 특성 값의 경우 처리기의 메서드 이름인 문자열을 제공 합니다.For the attribute value, provide a string that is the method name of your handler.

<Button Click="showUpdatesButton_Click">Show updates</Button>

컴파일하는 경우 컴파일러는 이제 showUpdatesButton_Click XAML 페이지의 x:Class 값에 선언 된 네임 스페이스의 코드 파일에 정의 된 라는 메서드를 사용할 것으로 예상 합니다.When you compile, the compiler now expects that there will be a method named showUpdatesButton_Click defined in the code-behind file, in the namespace declared in the XAML page's x:Class value. 또한 해당 메서드는 이벤트에 대 한 대리자 계약을 충족 해야 합니다 Click .Also, that method must satisfy the delegate contract for the Click event. 예를 들면 다음과 같습니다.For example:

namespace App1
{
    public sealed partial class MainPage: Page {
        ...
        private void showUpdatesButton_Click (object sender, RoutedEventArgs e) {
            //your code
        }
    }
}
' Namespace included at project level
Public NotInheritable Class MainPage
    Inherits Page
        ...
        Private Sub showUpdatesButton_Click (sender As Object, e As RoutedEventArgs e)
            ' your code
        End Sub
    ...
End Class
namespace winrt::App1::implementation
{
    struct MainPage : MainPageT<MainPage>
    {
        ...
        void showUpdatesButton_Click(Windows::Foundation::IInspectable const&, Windows::UI::Xaml::RoutedEventArgs const&);
    };
}
// .h
namespace App1
{
    public ref class MainPage sealed {
        ...
    private:
        void showUpdatesButton_Click(Object^ sender, RoutedEventArgs^ e);
    };
}

프로젝트 내에서 XAML은 .xaml 파일로 작성 되며 선호 하는 언어 (c #, Visual Basic, c + +/CX)를 사용 하 여 코드를 작성 하는 파일을 작성 합니다.Within a project, the XAML is written as a .xaml file, and you use the language you prefer (C#, Visual Basic, C++/CX) to write a code-behind file. XAML 파일이 프로젝트에 대 한 빌드 작업의 일부로 태그 컴파일되는 경우 네임 스페이스와 클래스를 XAML 페이지의 루트 요소에 대 한 x:Class 특성으로 지정 하 여 각 xaml 페이지에 대 한 xaml 코드 숨겨진 파일의 위치를 식별 합니다.When a XAML file is markup-compiled as part of a build action for the project, the location of the XAML code-behind file for each XAML page is identified by specifying a namespace and class as the x:Class attribute of the root element of the XAML page. 이러한 메커니즘이 XAML에서 작동 하는 방식 및 이러한 메커니즘이 프로그래밍 및 응용 프로그램 모델과 어떻게 관련 되는지에 대 한 자세한 내용은 이벤트 및 라우트된 이벤트 개요를 참조 하세요.For more info on how these mechanisms work in XAML and how they relate to the programming and application models, see Events and routed events overview.

참고

C + +/CX의 경우 두 개의 코드 숨김이 있습니다. 하나는 헤더 (.xaml)이 고 다른 하나는 구현 (.xaml)입니다.For C++/CX there are two code-behind files: one is a header (.xaml.h) and the other is implementation (.xaml.cpp). 구현은 헤더를 참조 하며,이는 기술적으로 코드 기반 연결에 대 한 진입점을 나타내는 헤더입니다.The implementation references the header, and it's technically the header that represents the entry point for the code-behind connection.

리소스 사전Resource dictionaries

ResourceDictionary 일반적으로 리소스 사전을 xaml 페이지 또는 별도의 xaml 파일의 영역으로 작성 하 여 수행 되는 일반적인 작업입니다.Creating a ResourceDictionary is a common task that is usually accomplished by authoring a resource dictionary as an area of a XAML page or a separate XAML file. 리소스 사전 및 사용 방법은이 항목에서 다루지 않는 더 큰 개념 영역입니다.Resource dictionaries and how to use them is a larger conceptual area that is outside the scope of this topic. 자세한 내용은 ResourceDictionary 및 XAML 리소스 참조를 참조 하세요.For more info see ResourceDictionary and XAML resource references.

XAML 및 XMLXAML and XML

XAML 언어는 기본적으로 XML 언어를 기반으로 합니다.The XAML language is fundamentally based on the XML language. 그러나 XAML은 XML을 크게 확장 합니다.But XAML extends XML significantly. 특히 스키마 개념은 지원 형식 개념과의 관계 때문에 매우 다르게 처리 되며 연결 된 멤버 및 태그 확장과 같은 언어 요소를 추가 합니다.In particular it treats the concept of schema quite differently because of its relationship to the backing type concept, and adds language elements such as attached members and markup extensions. xml: lang 은 XAML에서 올바르지만 구문 분석 동작이 아니라 런타임에 영향을 주지만 일반적으로 프레임 워크 수준 속성에 별칭을 지정 합니다.xml:lang is valid in XAML, but influences runtime rather than parse behavior, and is typically aliased to a framework-level property. 자세한 내용은 FrameworkElement.Language를 참조하세요.For more info, see FrameworkElement.Language. xml: base 는 태그에서 유효 하지만 파서는 무시 합니다.xml:base is valid in markup but parsers ignore it. xml: space 는 올바르지만 XAML 및 공백 항목에 설명 된 시나리오에만 해당 됩니다.xml:space is valid, but is only relevant for scenarios described in the XAML and whitespace topic. Encoding 특성은 XAML에서 유효 합니다.The encoding attribute is valid in XAML. UTF-8 및 UTF-16 인코딩만 지원 됩니다.Only UTF-8 and UTF-16 encodings are supported. UTF-32 인코딩은 지원 되지 않습니다.UTF-32 encoding is not supported.

XAML에서 대/소문자 구분Case sensitivity in XAML

XAML은 대/소문자를 구분 합니다.XAML is case-sensitive. 이는 XML을 기반으로 하는 XAML의 또 다른 결과 이며 대/소문자를 구분 합니다.This is another consequence of XAML being based on XML, which is case-sensitive. XAML 요소 및 특성 이름은 대/소문자를 구분 합니다.The names of XAML elements and attributes are case-sensitive. 특성 값은 대/소문자를 구분 합니다. 특정 속성에 대 한 특성 값이 처리 되는 방법에 따라 달라 집니다.The value of an attribute is potentially case-sensitive; this depends on how the attribute value is handled for particular properties. 예를 들어 특성 값이 열거형의 멤버 이름을 선언 하는 경우 멤버 이름 문자열을 형식으로 변환 하 여 열거형 멤버 값을 반환 하는 기본 제공 동작은 대/소문자를 구분 하지 않습니다.For example, if the attribute value declares a member name of an enumeration, the built-in behavior that type-converts a member name string to return the enumeration member value is not case-sensitive. 반면 name 속성의 값과 Name 속성이 선언 하는 이름을 기반으로 하는 개체 작업에 대 한 유틸리티 메서드 Name 는 이름 문자열을 대/소문자를 구분 하 여 처리 합니다.In contrast, the value of the Name property, and utility methods for working with objects based on the name that the Name property declares, treat the name string as case-sensitive.

XAML 이름 범위XAML namescopes

XAML 언어는 XAML 이름 범위의 개념을 정의 합니다.The XAML language defines a concept of a XAML namescope. Xaml 이름 범위 개념은 xaml 프로세서가 XAML 요소에 적용 된 x:Name 또는 Name 의 값을 처리 하는 방법, 특히 이름을 고유 식별자로 사용할 수 있는 범위에 영향을 줍니다.The XAML namescope concept influences how XAML processors should treat the value of x:Name or Name applied to XAML elements, particularly the scopes in which names should be relied upon to be unique identifiers. XAML 이름 범위는 별도 항목에서 자세히 설명 합니다. xaml 이름 범위를 참조 하세요.XAML namescopes are covered in more detail in a separate topic; see XAML namescopes.

개발 프로세스의 XAML 역할The role of XAML in the development process

XAML은 응용 프로그램 개발 프로세스에서 몇 가지 중요 한 역할을 담당 합니다.XAML plays several important roles in the app development process.

  • XAML은 c #, Visual Basic 또는 c + +/CX를 사용 하 여 프로그래밍 하는 경우 해당 UI에서 응용 프로그램의 UI 및 요소를 선언 하는 기본 형식입니다.XAML is the primary format for declaring an app's UI and elements in that UI, if you are programming using C#, Visual Basic or C++/CX. 일반적으로 프로젝트에 있는 하나 이상의 XAML 파일은 처음에 표시 되는 UI에 대 한 앱의 페이지 비유를 나타냅니다.Typically at least one XAML file in your project represents a page metaphor in your app for the initially displayed UI. 추가 XAML 파일은 탐색 UI에 대 한 추가 페이지를 선언할 수 있습니다.Additional XAML files might declare additional pages for navigation UI. 다른 XAML 파일은 템플릿 또는 스타일과 같은 리소스를 선언할 수 있습니다.Other XAML files can declare resources, such as templates or styles.
  • 응용 프로그램의 컨트롤과 UI에 적용 되는 스타일 및 템플릿을 선언 하는 데 XAML 형식을 사용 합니다.You use the XAML format for declaring styles and templates applied to controls and UI for an app.
  • 기존 컨트롤의 템플릿에 스타일 및 템플릿을 사용 하거나 기본 템플릿을 컨트롤 패키지의 일부로 제공 하는 컨트롤을 정의 하는 경우에 사용할 수 있습니다.You might use styles and templates either for templating existing controls, or if you define a control that supplies a default template as part of a control package. 이를 사용 하 여 스타일 및 템플릿을 정의 하는 경우 관련 XAML은 일반적으로 루트를 사용 하는 불연속 XAML 파일로 선언 됩니다 ResourceDictionary .When you use it to define styles and templates, the relevant XAML is often declared as a discrete XAML file with a ResourceDictionary root.
  • XAML은 응용 프로그램 UI를 만들고 여러 디자이너 앱 간에 UI 디자인을 교환할 때 디자이너에서 지 원하는 일반적인 형식입니다.XAML is the common format for designer support of creating app UI and exchanging the UI design between different designer apps. 특히 앱에 대 한 XAML은 서로 다른 XAML 디자인 도구 (또는 도구 내의 디자인 창) 간에 서로 다른 방법으로 사용할 수 있습니다.Most notably, XAML for the app can be interchanged between different XAML design tools (or design windows within tools).
  • 다른 여러 기술 에서도 XAML의 기본 UI를 정의 합니다.Several other technologies also define the basic UI in XAML. Windows Presentation Foundation (WPF) XAML 및 Microsoft Silverlight XAML과의 관계에서 Windows 런타임 XAML은 공유 기본 XAML 네임 스페이스에 대해 동일한 URI를 사용 합니다.In relationship to Windows Presentation Foundation (WPF) XAML and Microsoft Silverlight XAML, the XAML for Windows Runtime uses the same URI for its shared default XAML namespace. Windows 런타임에 대 한 XAML 어휘는 Silverlight에서 사용 되는 XAML 용 XAML 어휘 및 WPF에 의해 약간 낮은 범위에도 크게 겹칩니다.The XAML vocabulary for Windows Runtime overlaps significantly with the XAML-for-UI vocabulary also used by Silverlight and to a slightly lesser extent by WPF. 따라서 XAML은 XAML도 사용 하는 기반이 기술에 대해 원래 정의 된 UI에 대 한 효율적인 마이그레이션 경로를 승격 합니다.Thus, XAML promotes an efficient migration pathway for UI originally defined for precursor technologies that also used XAML.
  • XAML은 UI의 시각적 모양을 정의 하 고, 관련 된 코드 숨김이 있는 파일은 논리를 정의 합니다.XAML defines the visual appearance of a UI, and an associated code-behind file defines the logic. 코드 숨김으로 논리를 변경 하지 않고 UI 디자인을 조정할 수 있습니다.You can adjust the UI design without making changes to the logic in code-behind. XAML은 디자이너와 개발자 사이의 워크플로를 단순화 합니다.XAML simplifies the workflow between designers and developers.
  • Xaml 언어에 대 한 다양 한 비주얼 디자이너 및 디자인 화면 지원으로 인해 XAML은 초기 개발 단계에서 신속 하 게 UI 프로토타입을 지원 합니다.Because of the richness of the visual designer and design surface support for the XAML language, XAML supports rapid UI prototyping in the early development phases.

개발 프로세스의 고유한 역할에 따라 XAML과 상호 작용 하지 않을 수 있습니다.Depending on your own role in the development process, you might not interact with XAML much. XAML 파일과 상호 작용 하는 정도는 사용 중인 개발 환경, toolboxes 및 속성 편집기와 같은 대화형 디자인 환경 기능을 사용 하는지 여부, Windows 런타임 앱의 범위 및 용도에 따라 달라 집니다.The degree to which you do interact with XAML files also depends on which development environment you are using, whether you use interactive design environment features such as toolboxes and property editors, and the scope and purpose of your Windows Runtime app. 그럼에도 불구 하 고 응용 프로그램을 개발 하는 동안 텍스트 편집기나 XML 편집기를 사용 하 여 요소 수준에서 XAML 파일을 편집 하 게 될 것입니다.Nevertheless, it is likely that during development of the app, you will be editing a XAML file at the element level using a text or XML editor. 이 정보를 사용 하 여 텍스트 또는 XML 표현의 XAML을 안전 하 게 편집 하 고 도구, 마크업 컴파일 작업 또는 Windows 런타임 앱의 런타임 단계에서 사용 하는 경우 XAML 파일의 선언과 용도에 대 한 유효성을 유지할 수 있습니다.Using this info, you can confidently edit XAML in a text or XML representation and maintain the validity of that XAML file's declarations and purpose when it is consumed by tools, markup compile operations, or the run-time phase of your Windows Runtime app.

로드 성능을 위해 XAML 최적화Optimize your XAML for load performance

성능에 대 한 모범 사례를 사용 하 여 XAML에서 UI 요소를 정의 하는 몇 가지 팁은 다음과 같습니다.Here are some tips for defining UI elements in XAML using best practices for performance. 이러한 팁 중 상당수는 XAML 리소스를 사용 하는 것과 관련이 있지만 편의를 위해 일반적인 XAML 개요에서 여기에 나열 되어 있습니다.Many of these tips relate to using XAML resources, but are listed here in the general XAML overview for convenience. XAML 리소스에 대 한 자세한 내용은 ResourceDictionary 및 xaml 리소스 참조를 참조 하세요.For more info about XAML resources see ResourceDictionary and XAML resource references. Xaml에서 피해 야 하는 성능 저하 중 일부를 의도적으로 보여 주는 XAML을 비롯 하 여 성능에 대 한 몇 가지 팁을 보려면 xaml 태그 최적화를 참조 하세요.For some more tips on performance, including XAML that purposely demonstrates some of the poor performance practices that you should avoid in your XAML, see Optimize your XAML markup.

  • XAML에서 자주 동일한 색 브러시를 사용 하는 경우 SolidColorBrush 매번 특성 값으로 명명 된 색을 사용 하는 대신를 리소스로 정의 합니다.If you use the same color brush often in your XAML, define a SolidColorBrush as a resource rather than using a named color as an attribute value each time.
  • 둘 이상의 UI 페이지에서 동일한 리소스를 사용 하는 경우 각 페이지 대신에서 정의 하는 것이 좋습니다 Resources .If you use the same resource on more than one UI page, consider defining it in Resources rather than on each page. 반대로 한 페이지 에서만 리소스를 사용 하는 경우에는 응용 프로그램 리소스 에서 리소스를 정의 하지 말고이를 필요로 하는 페이지에 대해서만 정의 합니다.Conversely, if only one page uses a resource, don't define it in Application.Resources and instead define it only for the page that needs it. 이는 xaml을 설계 하는 동안 xaml을 구분 하는 동시에 XAML 구문 분석 중에 성능을 향상 하는 데 유용 합니다.This is good both for XAML factoring while designing your app and for performance during XAML parsing.
  • 앱 패키지를 사용 하는 리소스의 경우 사용 하지 않는 리소스 (키가 있지만 앱에 StaticResource 참조가 없는 리소스)를 확인 합니다.For resources that your app packages, check for unused resources (a resource that has a key, but there's no StaticResource reference in your app that uses it). 앱을 출시 하기 전에 XAML에서이를 제거 합니다.Remove these from your XAML before you release your app.
  • 디자인 리소스 ()를 제공 하는 별도의 XAML 파일을 사용 하는 경우 MergedDictionaries 이러한 파일에서 사용 하지 않는 리소스를 주석으로 처리 하거나 제거 하는 것이 좋습니다If you're using separate XAML files that provides design resources (MergedDictionaries), consider commenting or removing unused resources from these files. 둘 이상의 앱에서 사용 중이거나 모든 앱에 대 한 공용 리소스를 제공 하는 공유 XAML 시작 지점이 있는 경우에도 항상 XAML 리소스를 패키지 하 고 잠재적으로 로드 해야 하는 앱입니다.Even if you have a shared XAML starting point that you're using in more than one app or that provides common resources for all your app, it's still your app that packages the XAML resources each time, and potentially has to load them.
  • 컴퍼지션에 필요 하지 않은 UI 요소를 정의 하지 말고 가능한 경우 기본 컨트롤 템플릿을 사용 합니다 (이러한 템플릿은 이미 테스트 되 고 부하 성능에 대해 확인 됨).Don't define UI elements you don't need for composition, and use the default control templates whenever possible (these templates have already been tested and verified for load performance).
  • BorderUI 요소의 의도적인 그리기 대신 컨테이너를 사용 합니다.Use containers such as Border rather than deliberate overdraws of UI elements. 기본적으로 동일한 픽셀을 여러 번 그리지 않습니다.Basically, don't draw the same pixel multiple times. 과도 한 그리기 및 테스트 하는 방법에 대 한 자세한 내용은을 참조 하십시오 DebugSettings.IsOverdrawHeatMapEnabled .For more info on overdraw and how to test for it, see DebugSettings.IsOverdrawHeatMapEnabled.
  • 또는에 대 한 기본 항목 템플릿을 사용 ListView GridView 합니다. 여기에는 많은 수의 목록 항목에 대 한 시각적 트리를 빌드할 때 성능 문제를 해결 하는 특별 한 발표자 논리가 있습니다.Use the default items templates for ListView or GridView; these have special Presenter logic that solves performance issues when building the visual tree for large numbers of list items.

XAML 디버그Debug XAML

XAML은 태그 언어 이므로 Microsoft Visual Studio 내에서 디버깅에 대 한 일반적인 전략 중 일부를 사용할 수 없습니다.Because XAML is a markup language, some of the typical strategies for debugging within Microsoft Visual Studio are not available. 예를 들어 XAML 파일 내에서 중단점을 설정 하는 방법은 없습니다.For example, there is no way to set a breakpoint within a XAML file. 그러나 응용 프로그램을 개발 하는 동안 UI 정의 나 기타 XAML 태그를 사용 하 여 문제를 디버그 하는 데 도움이 되는 다른 기술도 있습니다.However, there are other techniques that can help you debug issues with UI definitions or other XAML markup while you're still developing your app.

XAML 파일에 문제가 발생 하는 경우 가장 일반적인 결과는 일부 시스템 또는 앱이 XAML 구문 분석 예외를 throw 하는 것입니다.When there are problems with a XAML file, the most typical result is that some system or your app will throw a XAML parse exception. Xaml 구문 분석 예외가 있을 때마다 XAML 파서에서 로드 한 XAML이 유효한 개체 트리를 만들지 못했습니다.Whenever there is a XAML parse exception, the XAML loaded by the XAML parser failed to create a valid object tree. XAML이 루트 시각적 개체로 로드 되는 응용 프로그램의 첫 번째 "페이지"를 나타내는 경우와 같은 일부 경우에는 XAML 구문 분석 예외를 복구할 수 없습니다.In some cases, such as when the XAML represents the first "page" of your application that is loaded as the root visual, the XAML parse exception is not recoverable.

XAML은 일반적으로 Visual Studio와 같은 IDE 내에서, 그리고 XAML 디자인 화면 중 하나에서 편집 됩니다.XAML is often edited within an IDE such as Visual Studio and one of its XAML design surfaces. Visual Studio는 편집할 때 디자인 타임 유효성 검사 및 XAML 소스에 대 한 오류 검사를 제공 하는 경우가 많습니다.Visual Studio can often provide design-time validation and error checking of a XAML source as you edit it. 예를 들어 잘못 된 특성 값을 입력 하는 즉시 XAML 텍스트 편집기에 "물결선"가 표시 될 수 있으며, XAML 컴파일 패스에서 UI 정의에 문제가 발생 한 것을 볼 수 있을 때까지 기다리지 않아도 됩니다.For example it might display "squiggles" in the XAML text editor as soon as you type a bad attribute value, and you won't even have to wait for a XAML compile pass to see that something's wrong with your UI definition.

앱이 실제로 실행 되 면 디자인 타임에 XAML 구문 분석 오류가 감지 되지 않은 경우 CLR (공용 언어 런타임)에서 Xamlparseexception으로 보고 합니다.Once the app actually runs, if any XAML parse errors have gone undetected at design time, these are reported by the common language runtime (CLR) as a XamlParseException. 런타임 Xamlparseexception에 대해 수행할 수 있는 작업에 대 한 자세한 내용은 c #에서 Windows 런타임 앱에 대 한 예외 처리 또는 Visual Basic를 참조 하세요.For more info on what you might be able to do for a run-time XamlParseException, see Exception handling for Windows Runtime apps in C# or Visual Basic.

참고

코드에 c + +/CX를 사용 하는 앱은 특정 Xamlparseexception을 얻지 못합니다.Apps that use C++/CX for code don't get the specific XamlParseException. 그러나 예외의 메시지는 오류의 원인이 XAML 관련 임을 명확 하 게 하 고 XAML 파일의 줄 번호와 같은 컨텍스트 정보를 XAML 파일에 포함 하는 것을 명확 하 게 합니다 .But the message in the exception clarifies that the source of the error is XAML-related, and includes context info such as line numbers in a XAML file, just like XamlParseException does.

Windows 런타임 앱을 디버깅 하는 방법에 대 한 자세한 내용은 디버그 세션 시작을 참조 하세요.For more info on debugging a Windows Runtime app, see Start a debug session.