XAML 네임스페이스 및 네임스페이스 매핑
이 항목에서는 대부분의 XAML 파일의 루트 요소에 있는 XML/XAML 이름 범위(xmlns) 매핑에 대해 설명합니다. 또한 사용자 지정 형식 및 어셈블리에 대해 유사한 매핑을 생성하는 방법에 대해서도 설명합니다.
XAML 네임스페이스가 코드 정의 및 형식 라이브러리와 관련된 방법
범용 및 애플리케이션에서 앱 프로그래밍을 Windows 런타임 위해 XAML은 개체, 해당 개체의 속성 및 계층으로 표현된 개체 속성 관계를 선언하는 데 사용됩니다. XAML에서 선언하는 개체는 형식 라이브러리 또는 다른 프로그래밍 기술 및 언어로 정의된 다른 표현을 통해 지원됩니다. 이러한 라이브러리는 다음과 같습니다.
- Windows 런타임 대한 기본 제공 개체 집합입니다. 이는 고정된 개체 집합이며 XAML에서 이러한 개체에 액세스하면 내부 형식 매핑 및 활성화 논리가 사용됩니다.
- Microsoft 또는 타사에서 제공하는 분산 라이브러리입니다.
- 앱이 통합하고 패키지가 재배포하는 타사 컨트롤의 정의를 나타내는 라이브러리입니다.
- 프로젝트의 일부이며 사용자 코드 정의의 일부 또는 전부를 포함하는 고유한 라이브러리입니다.
백업 형식 정보는 특정 XAML 네임스페이스 정의와 연결됩니다. Windows 런타임 같은 XAML 프레임워크는 여러 어셈블리와 여러 코드 네임스페이스를 집계하여 단일 XAML 네임스페이스에 매핑할 수 있습니다. 이를 통해 더 큰 프로그래밍 프레임워크 또는 기술을 다루는 XAML 어휘의 개념을 사용할 수 있습니다. XAML 어휘는 매우 광범위할 수 있습니다. 예를 들어 이 참조의 Windows 런타임 앱에 대해 문서화된 대부분의 XAML은 단일 XAML 어휘를 구성합니다. XAML 어휘도 확장할 수 있습니다. 지원 코드 정의에 형식을 추가하여 확장하여 XAML 어휘에 대한 매핑된 네임스페이스 원본으로 이미 사용되는 코드 네임스페이스에 형식을 포함해야 합니다.
XAML 프로세서는 런타임 개체 표현을 만들 때 해당 XAML 네임스페이스와 연결된 지원 어셈블리에서 형식 및 멤버를 조회할 수 있습니다. 이러한 이유로 XAML은 개체 생성 동작의 정의를 형식화하고 교환하는 유용한 방법이 되었으며 UWP 앱의 UI 정의 기술로 사용됩니다.
일반적인 XAML 태그 사용의 XAML 네임스페이스
XAML 파일은 거의 항상 루트 요소에서 기본 XAML 네임스페이스를 선언합니다. 기본 XAML 네임스페이스는 접두사로 한정하지 않고 선언할 수 있는 요소를 정의합니다. 예를 들어 요소를 <Balloon />
선언하는 경우 XAML 파서는 요소 풍선 이 존재하고 기본 XAML 네임스페이스에서 유효할 것으로 예상합니다. 반면, 풍선이 정의된 기본 XAML 네임스페이스에 없는 경우 해당 요소 이름을 접두사로 한정해야 합니다. 예를 들면 다음과 같습니다<party:Balloon />
. 접두사는 요소가 기본 네임스페이스와 다른 XAML 네임스페이스에 있음을 나타내며, 이 요소를 사용하려면 먼저 XAML 네임스페이스를 접두사 party에 매핑해야 합니다. XAML 이름 범위는 선언된 특정 요소와 XAML 구조체의 해당 요소에 포함된 모든 요소에도 적용됩니다. 이러한 이유로 XAML 이름 범위는 이 상속을 활용하기 위해 XAML 파일의 루트 요소에서 거의 항상 선언됩니다.
기본 및 XAML 언어 XAML 이름 범위 선언
대부분의 XAML 파일의 루트 요소 내에는 두 개의 xmlns 선언이 있습니다. 첫 번째 선언은 XAML 네임스페이스를 기본값으로 매핑합니다. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
이는 XAML을 UI 정의 태그 형식으로 사용하는 여러 선행 Microsoft 기술에서 사용되는 것과 동일한 XAML 이름 범위 식별자입니다. 동일한 식별자의 사용은 의도적인 것이며 C++, C#또는 Visual Basic을 사용하여 이전에 정의된 UI를 Windows 런타임 앱으로 마이그레이션할 때 유용합니다.
두 번째 선언은 XAML 정의 언어 요소의 개별 XAML 네임스페이스를 일반적으로 "x:" 접두사에 매핑합니다. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
이 xmlns 값과 매핑된 "x:" 접두사는 XAML을 사용하는 여러 선행 Microsoft 기술에 사용된 정의와도 동일합니다.
이러한 선언 간의 관계는 XAML이 언어 정의이고 Windows 런타임이 XAML을 언어로 사용하고 해당 형식이 XAML에서 참조되는 특정 어휘를 정의하는 하나의 구현이라는 것입니다.
XAML 언어는 특정 언어 요소를 지정하며, 이러한 각 언어는 XAML 네임스페이스에 대해 작동하는 XAML 프로세서 구현을 통해 액세스할 수 있어야 합니다. XAML 언어 XAML 이름 범위 항목을 지원하기 위한 "x:" 매핑 접두사 규칙 뒤에는 프로젝트 템플릿, 샘플 코드 및 언어 기능에 대한 설명서가 있습니다. XAML 언어 네임스페이스는 C++, C# 또는 Visual Basic을 사용하는 기본 Windows 런타임 앱에도 필요한 몇 가지 일반적으로 사용되는 기능을 정의합니다. 예를 들어, partial 클래스를 통해 코드 숨김을 XAML 파일에 결합하려면 관련 XAML 파일의 루트 요소에서 해당 클래스를 x:Class attribute 특성으로 명명해야 합니다. 또는 ResourceDictionary 및 XAML 리소스 참조에서 키 리소스로 XAML 페이지에 정의된 모든 요소에는 해당 개체 요소에 설정된 x:Key 특성이 있어야 합니다.
기본 XAML 네임스페이스에 매핑되는 코드 네임스페이스
다음은 현재 기본 XAML 네임스페이스에 매핑된 코드 네임스페이스의 목록입니다.
- Windows.UI
- Windows.UI.Xaml
- Windows.UI.Xaml.Automation
- Windows.UI.Xaml.Automation.Peers
- Windows.UI.Xaml.Automation.Provider
- Windows.UI.Xaml.Automation.Text
- Windows.UI.Xaml.Controls
- Windows.UI.Xaml.Controls.Primitives
- Windows.UI.Xaml.Data
- Windows.UI.Xaml.Documents
- Windows.UI.Xaml.Input
- Windows.UI.Xaml.Interop
- Windows.UI.Xaml.Markup
- Windows.UI.Xaml.Media
- Windows.UI.Xaml.Media.Animation
- Windows.UI.Xaml.Media.Imaging
- Windows.UI.Xaml.Media.Media3D
- Windows.UI.Xaml.Navigation
- Windows.UI.Xaml.Resources
- Windows.UI.Xaml.Shapes
- Windows.UI.Xaml.Threading
- Windows.UI.Text
기타 XAML 네임스페이스
기본 네임스페이스 및 XAML 언어 XAML 네임스페이스 "x:" 외에도 Microsoft Visual Studio에서 생성된 앱의 초기 기본 XAML에 매핑된 다른 XAML 네임스페이스가 표시될 수도 있습니다.
d: (http://schemas.microsoft.com/expression/blend/2008
)
"d:" XAML 네임스페이스는 디자이너 지원, 특히 Microsoft Visual Studio의 XAML 디자인 화면에서 디자이너 지원을 위한 것입니다. "d:" XAML 네임스페이스를 사용하면 XAML 요소에서 디자이너 또는 디자인 타임 특성을 사용할 수 있습니다. 이러한 디자이너 특성은 XAML이 동작하는 방식의 디자인 측면에만 영향을 줍니다. 디자이너 특성은 앱이 실행될 때 Windows 런타임 XAML 파서에서 동일한 XAML을 로드할 때 무시됩니다. 일반적으로 디자이너 특성은 모든 XAML 요소에서 유효하지만 실제로는 디자이너 특성을 직접 적용하는 것이 적절한 특정 시나리오만 있습니다. 특히 많은 디자이너 특성은 데이터 바인딩을 사용하는 XAML 및 코드를 개발하는 동안 데이터 컨텍스트 및 데이터 원본과 상호 작용하기 위한 더 나은 환경을 제공하기 위한 것입니다.
- d:DesignHeight 및 d:DesignWidth 특성: 이러한 특성은 Visual Studio 또는 다른 XAML 디자이너 화면에서 만드는 XAML 파일의 루트에 적용되기도 합니다. 예를 들어 이러한 특성은 앱 프로젝트에 새 UserControl을 추가하는 경우 생성되는 XAML의 UserControl 루트에 설정됩니다. 이러한 특성을 사용하면 XAML 콘텐츠가 컨트롤 인스턴스 또는 더 큰 UI 페이지의 다른 부분에 사용되면 존재할 수 있는 레이아웃 제약 조건을 예상할 수 있도록 XAML 콘텐츠의 컴퍼지션을 더 쉽게 디자인할 수 있습니다.
참고 Microsoft Silverlight에서 XAML을 마이그레이션하는 경우 전체 UI 페이지를 나타내는 루트 요소에 이러한 특성이 있을 수 있습니다. 이 경우 특성을 제거할 수 있습니다. 시뮬레이터와 같은 XAML 디자이너의 다른 기능은 d:DesignHeight 및 d:DesignWidth를 사용하는 고정 크기 페이지 레이아웃보다 크기 조정 및 보기 상태를 잘 처리하는 페이지 레이아웃을 디자인하는 데 더 유용할 수 있습니다.
- d:DataContext 특성: 페이지 루트 또는 컨트롤에서 이 특성을 설정하여 개체에 있는 명시적 또는 상속된 DataContext를 재정의할 수 있습니다.
- d:DesignSource 특성: CollectionViewSource에 대한 디자인 타임 데이터 원본을 지정하고 원본을 재정의합니다.
- d:DesignInstance 및 d:DesignData 태그 확장: 이러한 태그 확장은 d:DataContext 또는 d:DesignSource에 대한 디자인 타임 데이터 리소스를 제공하는 데 사용됩니다. 여기서 디자인 타임 데이터 리소스를 사용하는 방법을 완전히 문서화하지는 않습니다. 자세한 내용은 디자인 타임 특성을 참조 하세요. 몇 가지 사용 예제는 디자인 화면의 샘플 데이터 및 프로토타입 생성을 참조하세요 .
mc: (http://schemas.openxmlformats.org/markup-compatibility/2006
)
"mc:"는 XAML을 읽기 위한 태그 호환성 모드를 나타내고 지원합니다. 일반적으로 "d:" 접두사는 mc:Ignorable 특성 과 연결됩니다. 이 기술을 사용하면 런타임 XAML 파서가 "d:"의 디자인 특성을 무시할 수 있습니다.
local: 및 common:
"local:" 템플릿 기반의 UWP 앱 프로젝트에 대해 XAML 페이지 내에서 자주 매핑되는 접두사입니다. app.xaml을 포함한 모든 XAML 파일에 대한 x:Class 특성 및 코드를 포함하도록 만들어진 동일한 네임스페이스를 참조하도록 매핑됩니다. 이 동일한 네임스페이스의 XAML에서 사용하려는 사용자 지정 클래스를 정의하는 한 로컬: 접두사를 사용하여 XAML에서 사용자 지정 형식을 참조할 수 있습니다. 템플릿 기반의 UWP 앱 프로젝트에서 가져온 관련 접두사는 common:입니다. 이 접두사는 변환기 및 명령과 같은 유틸리티 클래스를 포함하는 중첩된 "Common" 네임스페이스를 참조하며, 솔루션 탐색기 보기의 Common 폴더에서 정의를 찾을 수 있습니다.
vsm:
사용하지 마세요. "vsm:"은 다른 Microsoft 기술에서 가져온 이전 XAML 템플릿에서 볼 수 있는 접두사입니다. 이름 범위는 원래 레거시 이름 범위 도구 문제를 해결했습니다. Windows 런타임 사용하는 모든 XAML에서 "vsm:"에 대한 XAML 이름 범위 정의를 삭제하고 VisualState, VisualStateGroup 및 관련 개체의 접두사 사용을 변경하여 기본 XAML 이름 범위를 대신 사용해야 합니다. XAML 마이그레이션에 대한 자세한 내용은 Silverlight 또는 WPF XAML/코드를 Windows 런타임 앱으로 마이그레이션을 참조하세요 .
XAML 이름 범위 및 접두사에 사용자 지정 형식 매핑
XAML을 사용하여 사용자 지정 형식에 액세스할 수 있도록 XAML 이름 범위를 매핑할 수 있습니다. 즉, 사용자 지정 형식을 정의하는 코드 표현에 있는 코드 이름 범위를 매핑하고 사용 접두사와 함께 XAML 이름 범위를 할당합니다. XAML에 대한 사용자 지정 형식은 Microsoft .NET 언어(C# 또는 Microsoft Visual Basic) 또는 C++에서 정의할 수 있습니다. 매핑은 xmlns 접두사를 정의하여 만들어집니다. 예를 들어 xmlns:myTypes
토큰 myTypes:
을 사용하여 모든 사용의 접두사를 지정하여 액세스하는 새 XAML 네임스페이스를 정의합니다.
xmlns 정의에는 접두사 명명뿐만 아니라 값도 포함됩니다. 값은 등호를 따라 따옴표 안에 들어가는 문자열입니다. 일반적인 XML 규칙은 고유성 및 식별에 대한 규칙이 있도록 XML 네임스페이스를 URI(Uniform Resource Identifier)와 연결하는 것입니다. 기본 XAML 네임스페이스 및 XAML 언어 XAML 네임스페이스와 Windows 런타임 XAML에서 사용되는 일부 덜 사용되는 XAML 네임스페이스에 대해서도 이 규칙이 표시됩니다. 그러나 사용자 지정 형식을 매핑하는 XAML 네임스페이스의 경우 URI를 지정하는 대신 "using:" 토큰으로 접두사 정의를 시작합니다. "using:" 토큰에 따라 코드 네임스페이스의 이름을 지정합니다.
예를 들어 "CustomClasses" 네임스페이스를 참조할 수 있는 "custom1" 접두사를 매핑하여 해당 네임스페이스 또는 어셈블리의 클래스를 XAML의 개체 요소로 사용하려면 XAML 페이지에 루트 요소에 대한 다음 매핑이 있어야 합니다. xmlns:custom1="using:CustomClasses"
동일한 페이지 범위의 부분 클래스를 매핑할 필요가 없습니다. 예를 들어 페이지의 XAML UI 정의에서 이벤트를 처리하기 위해 정의한 이벤트 처리기를 참조하기 위해 접두사는 필요하지 않습니다. 또한 Visual Studio의 많은 시작 XAML 페이지에서 C++, C# 또는 Visual Basic을 사용하여 Windows 런타임 앱에 대한 프로젝트를 생성했으며, 이 접두사는 프로젝트 지정 기본 네임스페이스와 부분 클래스 정의에서 사용되는 네임스페이스를 참조하는 "local:" 접두사를 이미 매핑합니다.
CLR 언어 규칙
.NET 언어(C# 또는 Microsoft Visual Basic)로 지원 코드를 작성하는 경우 네임스페이스 이름의 일부로 점(".")을 사용하는 규칙을 사용하여 코드 네임스페이스의 개념 계층 구조를 만들 수 있습니다. 네임스페이스 정의에 점이 포함되어 있으면 점이 "using:" 토큰 이후에 지정한 값의 일부여야 합니다.
코드 숨김 파일 또는 코드 정의 파일이 C++ 파일인 경우 XAML 구문에 차이가 없도록 CLR(공용 언어 런타임) 언어 형식을 따르는 특정 규칙이 있습니다. C++에서 중첩된 네임스페이스를 선언하는 경우 "using:" 토큰 뒤에 있는 값을 지정할 때 연속 중첩된 네임스페이스 문자열 사이의 구분 기호는 "::"가 아니라 "."여야 합니다.
XAML에서 사용할 코드를 정의할 때는 중첩 형식(예: 클래스 내의 열거형 중첩)을 사용하지 마세요. 중첩된 형식은 평가할 수 없습니다. XAML 파서에서 점이 네임스페이스 이름의 일부가 아닌 중첩된 형식 이름의 일부임을 구분할 수 있는 방법은 없습니다.
사용자 지정 형식 및 어셈블리
XAML 네임스페이스에 대한 지원 형식을 정의하는 어셈블리의 이름은 매핑에 지정되지 않습니다. 어셈블리를 사용할 수 있는 논리는 앱 정의 수준에서 제어되며 기본 앱 배포 및 보안 원칙의 일부입니다. XAML에 대한 코드 정의 소스로 포함하려는 어셈블리를 프로젝트 설정의 종속 어셈블리로 선언합니다. 자세한 내용은C# 및 Visual Basic으로 Windows 런타임 구성 요소 만들기를 참조하세요.
기본 앱의 애플리케이션 정의 또는 페이지 정의에서 사용자 지정 형식을 참조하는 경우 해당 형식은 추가 종속 어셈블리 구성 없이 사용할 수 있지만 해당 형식이 포함된 코드 네임스페이스를 매핑해야 합니다. 일반적인 규칙은 지정된 XAML 페이지의 기본 코드 네임스페이스에 대한 접두사 "local"을 매핑하는 것입니다. 이 규칙은 종종 XAML 프로젝트의 프로젝트 템플릿 시작에 포함됩니다.
연결된 속성
연결된 속성을 참조하는 경우 연결된 속성 이름의 소유자 유형 부분은 기본 XAML 네임스페이스에 있거나 접두사를 지정해야 합니다. 특성과 별도로 접두사를 지정하는 경우는 드물지만, 특히 사용자 지정 연결된 속성의 경우 필요할 때도 있습니다. 자세한 내용은 사용자가 연결한 속성을 참조하세요.