내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 XAML

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

이 개요 항목에서는 Windows Phone 과 함께 사용되는 XAML(Extensible Application Markup Language)에서 개체를 선언하고 속성을 설정하는 다양한 방법에 대해 설명합니다.

이 항목에는 다음 단원이 포함되어 있습니다.

 

XAML(Extensible Application Markup Language)은 선언적 언어입니다. 구체적으로 XAML은 여러 개체 간의 계층적 관계를 보여 주는 언어 구조를 사용하고, 또한 형식을 확장할 수 있게 하는 지원 형식 규칙을 사용하여 개체를 초기화하고 개체 속성을 설정할 수 있습니다. 이 선언적 XAML 태그에 시각적인 UI 요소를 만들 수 있습니다. 그런 다음 별도의 코드 숨김 파일을 사용하여 이벤트에 응답하고 XAML에서 선언한 개체를 조작할 수 있습니다. XAML 언어는 Visual Studio 와 Microsoft Expression Blend 사이에서 XAML 소스를 교환하는 등 개발 프로세스 중에 여러 도구와 역할 간에 소스를 데이터 손실 없이 교환할 수 있게 지원합니다.

XAML 파일은 일반적으로 확장명이 .xaml인 XML 파일입니다. 다음 예제에서는 기본적인 Windows Phone XAML 파일의 내용을 보여 줍니다.

<UserControl x:Class="MyWindowsPhone.Page"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
>
  <Grid Background="OldLace">
  </Grid>
</UserControl>

Windows Phone 아키텍처 및 Windows Phone 앱 개발 프로세스에서 XAML은 몇 가지 중요한 역할을 수행합니다.

  • XAML은 Windows Phone UI 및 해당 UI의 요소를 선언하기 위한 기본 형식입니다. 일반적으로 프로젝트에 포함된 하나 이상의 XAML 파일이 앱에서 처음 표시되는 UI에 대한 "페이지" 비유를 나타냅니다. 다른 XAML 파일은 탐색 UI 또는 모달 교체 UI에 해당하는 페이지를 추가로 선언할 수 있습니다. XAML 파일은 UI 외에 템플릿 또는 재사용하거나 교체할 수 있는 앱의 기타 요소 같은 리소스를 선언할 수도 있습니다.

  • XAML은 Windows Phone 컨트롤 및 UI의 논리적 기초에 적용되는 템플릿 및 스타일을 선언하기 위해 사용되는 형식입니다. 기존 컨트롤을 템플릿으로 활용하려는 경우 또는 컨트롤의 기본 템플릿을 제공하는 컨트롤 작성자인 경우에 템플릿 및 스타일을 선언하게 될 수 있습니다. 스타일과 템플릿 정의에 사용되는 경우 XAML은 ResourceDictionary 루트를 사용한 XAML 파일로 선언되는 경우가 많습니다.

  • XAML은 Windows Phone UI를 만들고 서로 다른 디자이너 앱 간에 UI 디자인을 교환할 수 있도록 하는 디자이너 지원의 일반적인 형식입니다. 특히 Windows Phone 앱용 XAML은 Expression Blend 제품과 Visual Studio 에서 혼용될 수 있습니다.

  • Windows Phone XAML은 UI의 시각적 모양을 정의하고 연결된 코드 숨김 파일은 논리를 정의합니다. UI 디자인은 코드 숨김 파일에서 논리를 변경하지 않아도 조정할 수 있습니다. XAML의 이러한 역할은 시각적 디자인 담당자와 앱 논리 및 정보 디자인 담당자 간의 워크플로를 단순화합니다.

  • 비주얼 디자이너와 디자인 화면이 지원되므로 XAML을 사용하면 UI 프로토타입을 개발 초기 단계에서 신속히 만들 수 있고, 시각적 디자인이 급속히 변경되는 경우에도 개발 프로세스 전체에서 디자인 요소를 코드 액세스 지점으로 보존할 수 있습니다.

개발 프로세스에서 담당하는 역할에 따라서는 XAML 언어 또는 XAML 구문과의 상호 작용이 깊이 있게 이루어지지 않을 수도 있습니다. Windows Phone XAML과의 상호 작용 수준은 사용 중인 개발 환경에 따라 달라질 수도 있고, 도구 상자, 속성 편집기 같은 대화형 디자인 환경 기능을 사용하는지 여부 및 Windows Phone 앱의 범위와 용도에 따라 달라질 수도 있습니다. 상호 작용 수준에 관계없이 Windows Phone 앱을 개발하는 중에는 일반적으로 텍스트 기반 편집기를 사용하여 요소 수준에서 Windows Phone XAML 파일을 편집합니다. 이 항목은 XAML 언어 및 XAML 구문에 대해 자세히 설명하기 위해 작성되었습니다. 또한 이 항목에서는 WPF 또는 WCF와 같이 XAML을 활용하는 다른 프레임워크와 달리 Windows Phone 에만 적용되는 XAML의 사용법 및 동작을 소개합니다. 이 정보를 활용하면 텍스트 모드에서 Windows Phone 용 XAML을 자신 있게 편집할 수 있고, XAML 파일이 도구, 태그 컴파일 작업 또는 앱의 Windows Phone 런타임 로드에 의해 사용될 때 해당 XAML 파일의 선언 유효성 및 용도를 유지할 수 있습니다.

프로그래밍 관점에서의 폭넓은 정의에 따르면 네임스페이스는 프로그래밍 엔터티를 참조하는 문자열 토큰을 해석하는 방법을 결정합니다. 네임스페이스는 문자열 토큰이 다시 사용될 경우의 모호성을 해결할 수도 있습니다. 프로그래밍 프레임워크에서는 네임스페이스 개념을 사용하여 프레임워크 선언 토큰과 사용자 선언 토큰을 분리하고 네임스페이스 한정자를 통해 토큰 충돌에 따른 모호성을 해소합니다. XAML 네임스페이스는 이러한 용도에 맞는 XAML 언어를 위한 네임스페이스 개념입니다. XAML은 일반적 용도에 따라 또는 Windows Phone 에 맞춰 조정되어 개체, 개체의 속성 및 계층 구조로 표현된 개체-속성 관계를 선언하는 데 사용됩니다. 선언한 개체는 형식 라이브러리에 의해 지원됩니다. 이러한 라이브러리는 다음 중 하나일 수 있습니다.

  • 배포된 모든 런타임에서 사용 가능한 Windows Phone 핵심 라이브러리

  • Windows Phone SDK의 일부로 배포된 라이브러리. 이 라이브러리는 앱 라이브러리 캐싱 옵션을 사용하여 패키지로 재배포됩니다.

  • 앱에 통합되고 앱 패키지로 재배포되는 타사 컨트롤의 정의를 나타내는 라이브러리

  • Windows Phone 프로젝트에 의해 만들어지고 앱의 Windows Phone 사용자 코드 중 일부 또는 전부가 들어 있는 자체 제작 라이브러리

  • 별도 프로젝트에서 정의하고 여러 가지 웹 배포 전략 중 하나를 사용하여 Windows Phone 앱 모델을 통해 참조하는 다른 라이브러리

XAML 네임스페이스 개념에서는 XAML 스타일 네임스페이스 선언(xmlns)을 태그에서 사용하고 지원 형식 정보를 특정 XAML 네임스페이스와 연결합니다. XAML 네임스페이스의 식별자는 URI 또는 CLR 네임스페이스와 어셈블리 정보 형식의 문자열 토큰일 수 있습니다. 따라서 XAML 파일을 읽는 XAML 프로세서는 태그에 있는 여러 토큰을 구별할 수 있고, 런타임 개체 표현을 만들 때 해당 XAML 네임스페이스와 연결된 지원 어셈블리에서 형식 및 멤버를 조회할 수 있습니다.

대부분의 XAML 파일에서는 기본 XAML 네임스페이스가 루트 요소에 선언됩니다. 기본 XAML 네임스페이스는 접두사를 사용하여 추가로 한정하지 않아도 선언할 수 있는 요소를 정의합니다. 예를 들어 <Balloon /> 요소를 선언한 경우 해당 Balloon 요소는 기본 XAML 네임스페이스에 존재하고 유효한 것으로 간주됩니다. 기본 XAML 네임스페이스에 Balloon이 정의되어 있지 않은 경우에는 해당 참조를 <party:Balloon />과 같이 접두사로 한정해야 합니다. 접두사는 기본 네임스페이스가 아닌 다른 XAML 네임스페이스에 엔터티가 있음을 나타내고, 위 경우에서는 사용상 편의를 위해 XAML 네임스페이스를 접두사 party에 매핑했음을 나타냅니다.

XAML 네임스페이스는 해당 네임스페이스가 선언된 특정 요소에 적용되고 XAML 구조에서 이 요소에 포함되는 모든 요소에도 적용됩니다. 이러한 이유 때문에 XAML 네임스페이스는 이 상속 개념을 활용하기 위해 거의 항상 루트 요소에서 선언됩니다.

Windows Phone 의 기본 XAML 네임스페이스에는 핵심 라이브러리인 System.Windows.dll에 들어 있는 Windows Phone 정의 형식이 거의 모두 포함되어 있습니다. 이러한 형식은 XAML에서 선언하는 데 사용할 수 있습니다. 기본 XAML 네임스페이스는 CLR 네임스페이스 한정자를 생략할 수 있게 한다는 점에서 using 또는 Imports 문을 코드 파일에서 사용할 때와 유사한 편리함을 제공합니다. 그러나 기본 XAML 네임스페이스는 여러 가지 CLR 네임스페이스에 있는 형식을 포함할 수 있다는 차이점이 있습니다. 예를 들어 기본 Windows Phone XAML 네임스페이스를 사용하는 경우 <Button />System.Windows.Controls.Button을 참조하고 <ImageBrush />System.Windows.Media.ImageBrush를 참조합니다. 핵심 라이브러리가 생성된 방식에 의해 선언된 대로 System.Windows.ControlsSystem.Windows.Media CLR 네임스페이스가 Windows Phone 의 기본 XAML 네임스페이스에 매핑되어 있기 때문에 이와 같이 참조하게 됩니다.

Windows Phone SDK의 일부로 배포되는 Windows Phone 라이브러리에 포함된 형식을 XAML에서 사용하려면 일반적으로 접두사 매핑이 필요합니다.

SDK 라이브러리에는 어셈블리를 로드하는 디자이너가 특정 접두사를 제안할 수 있도록 CLR 특성이 사용됩니다. Visual Studio 에서는 참조된 어셈블리에서 CLR 특성을 읽는 자동 완성 기능을 프로젝트에 의해 이미 참조된 모든 어셈블리에 대해 사용할 수 있습니다. 이 Visual Studio 기능은 가능한 모든 XAML 네임스페이스를 드롭다운으로 제공하거나 제안된 접두사를 힌트로 사용하여 특정 매핑 선택 항목을 제안할 수 있게 합니다.

Windows Phone SDK 어셈블리는 여러 라이브러리와 해당 라이브러리 내의 여러 CLR 네임스페이스에서 XAML 네임스페이스를 공유할 수 있게 하는 URI 기반 XAML 네임스페이스를 정의합니다.

Windows Phone 핵심 라이브러리 이외의 라이브러리에 있는 형식을 참조하려면 XAML 네임스페이스를 선언하고 해당 네임스페이스를 접두사와 매핑해야 합니다. 일반적으로 라이브러리에서 URI 기반 XAML 네임스페이스를 지원하지 않는 경우 XAML의 라이브러리 형식에 액세스하는 데 필요한 XAML 네임스페이스 선언에 다음 세 가지 정보가 있어야 합니다.

  • 접두사. 이후의 XAML 태그에서 해당 XAML 네임스페이스를 참조하는 데 사용되는 태그 토큰을 정의합니다.

  • 해당 XAML 네임스페이스에 있는 요소의 지원 형식을 정의하는 어셈블리. XAML 선언에 기반하여 개체를 만들려는 XAML 프로세서는 이 어셈블리에 액세스해야 합니다.

  • 해당 어셈블리 내의 CLR 네임스페이스

XAML 언어 XAML 네임스페이스

거의 모든 Windows Phone XAML 파일에 선언되어 있는 XAML 네임스페이스는 XAML 언어에 정의된 요소를 위한 XAML 네임스페이스입니다. 규칙에 따라 XAML 언어 XAML 네임스페이스는 x: 접두사에 매핑됩니다. Windows Phone 프로젝트용 기본 프로젝트 및 파일 템플릿에는 기본 XAML 네임스페이스(접두사 없이 xmlns= 사용) 및 XAML 언어 네임스페이스(x: 접두사 사용)가 루트 요소의 일부로 항상 정의됩니다. 예를 들어 다음 예제 코드 조각은 Windows Phone 앱의 초기 페이지에 있는 템플릿으로 만들어진 UserControl 루트입니다. 여기서는 여는 태그만 보여 주고 코드가 단순화되어 있습니다.

<UserControl  
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
...>

x: 접두사/XAML 언어 XAML 네임스페이스에는 Windows Phone XAML에서 매우 자주 사용하게 될 몇 가지 프로그래밍 구문이 포함되어 있습니다. 다음은 가장 많이 사용되는 x: 접두사/XAML 네임스페이스 구문입니다.

  • x:Key: ResourceDictionary의 각 리소스에 대해 고유한 사용자 정의 키를 설정합니다. 키 토큰 문자열은 다른 XAML 사용에서 이러한 리소스를 검색하기 위해 StaticResource 태그 확장의 인수로 사용됩니다.

  • x:Class: XAML 페이지의 코드 숨김을 제공하는 클래스에 대한 CLR 네임스페이스 및 클래스 이름을 지정하고 XAML 태그 컴파일러 빌드 작업에 의해 생성 또는 조인된 클래스의 이름을 Windows Phone 앱 모델에서 지정합니다. 코드 숨김을 지원하거나 RootVisual로서 초기화되는 것을 지원하려면 그와 같은 클래스가 있어야 합니다. 리소스가 없고 x:Name을 전혀 사용하지 않는 경우에도 x:이 거의 항상 매핑되어 있는 것은 이러한 이유 때문입니다.

  • x:Name: XAML에 정의된 개체 요소가 처리된 후 런타임 코드에 있는 인스턴스에 대한 런타임 개체 이름을 지정합니다. 보다 편리한 FrameworkElement.Name 속성이 지원되지 않는 요소 이름 지정 시나리오에서는 x:Name을 사용합니다.

XAML 언어 XAML 네임스페이스에는 일반적으로는 사용되지 않는 추가적인 프로그래밍 구문이 있습니다.

기타 XAML 네임스페이스

d: 접두사(디자이너 네임스페이스용) 및 mc: 접두사(태그 호환성 유지용)를 정의한 Windows Phone 용 XAML 파일이 있을 수 있습니다. 일반적으로 이러한 네임스페이스는 도구 또는 프로세스 간의 XAML 교환과 관련된 인프라 지원을 위한 것이며, 대부분의 Windows Phone XAML에서는 이러한 네임스페이스의 요소와 상호 작용할 필요가 없습니다.

레거시 이유로 Windows Phone XAML은 다른 URI 기반 네임스페이스 http://schemas.microsoft.com/client/2007도 가능한 기본 XAML 네임스페이스로 지원합니다. 일반적으로 Windows Phone 앱 프로그래밍의 기본 XAML 네임스페이스로 http://schemas.microsoft.com/winfx/2006/xaml/presentation을 사용해야 하며 현재 앱에 http://schemas.microsoft.com/client/2007을 사용하면 안 됩니다.

XAML 파일에는 루트로 작동하는 요소가 항상 하나만 있습니다. 이 요소는 페이지 또는 앱의 전체 런타임 정의에 대한 개체 그래프 같은 일부 프로그래밍 구조의 개념적 루트가 될 개체를 선언합니다.

XAML 구문에서 XAML로 개체를 선언하는 방법은 세 가지가 있습니다.

  • 개체 요소 구문을 사용하여 직접 선언: 여는 태그와 닫는 태그를 사용하여 개체를 XML 형식 요소로 인스턴스화합니다. 이 구문을 사용하면 루트 개체를 선언하거나 속성 값을 설정하는 중첩 개체를 만들 수 있습니다.

  • 특성 구문을 사용하여 간접적으로 선언: 인라인 문자열 값을 사용하여 개체를 선언합니다. 개념적으로는 루트 이외의 모든 개체를 인스턴스화하는 데 이 방법을 사용할 수 있습니다. 이 구문을 사용하면 속성 값을 설정할 수 있습니다. XAML 프로세서의 관점에서 보면 이 선언 방법은 간접적입니다. 설정될 속성과 해당 속성의 형식 시스템 특성 및 제공된 문자열 값에 대한 정보를 기반으로 새 개체를 만드는 방법을 알고 있는 어떤 절차가 있어야 하기 때문입니다. 이는 일반적으로 문자열 입력을 처리할 수 있는 형식 변환기를 해당 형식 또는 속성에서 지원하거나 XAML 파서가 네이티브 변환을 사용함을 의미합니다.

  • 태그 확장을 사용하여 선언: 태그 확장 개념은 이 항목의 뒷부분에 있는 섹션에서 설명합니다.

세 가지 방법이 제공되기는 하지만 해당 XAML 어휘에서 개체 만들기 구문 모두를 항상 선택할 수 있는 것은 아닙니다. 어휘에 따라서는 개체 요소 구문을 사용해야만 개체를 만들 수도 있습니다. 소수의 몇몇 개체는 초기에 속성 값으로 설정해서만 만들 수 있습니다. 사실상 Windows Phone 에서 개체 요소 구문이나 특성 구문 중 하나를 선택하여 만들 수 있는 개체는 비교적 드뭅니다. 두 구문 형식을 모두 사용할 수 있는 경우에도 한 구문 형식이 주로 선택되거나 시나리오에 가장 적합한 형식이기 때문입니다.

개체를 인스턴스화하는 것과 동일한 방법으로 개체를 선언하는 대신 XAML에서 기존 개체를 참조하기 위해 사용할 수 있는 다른 방법도 있습니다. 기존 개체는 XAML의 다른 영역에 정의되어 있거나 플랫폼과 응용프로그램 또는 프로그래밍 모델의 특정 동작을 통해 암시적으로 존재할 수도 있습니다. 개체 참조 사용에 대한 자세한 내용은 이 항목의 "태그 확장" 섹션을 참조하세요.

개체 요소 구문을 사용하여 개체 선언

개체 요소 구문을 사용하여 개체를 선언하려면 다음 패턴을 사용하여 태그를 작성합니다. 여기서 objectName은 인스턴스화할 형식의 이름입니다. 이 문서에 자주 나오는 개체 요소 사용이라는 용어는 개체 요소 구문에서 개체를 만드는 데 사용되는 특정 태그를 간단히 표현한 것입니다.

<objectName>

</objectName>

다음은 Canvas 개체를 선언하기 위한 개체 요소 사용 예제입니다.

<Canvas>
</Canvas>

Canvas 등의 많은 Windows Phone 개체는 다른 개체를 포함할 수 있습니다.

<Canvas>
  <Rectangle>
  </Rectangle>
</Canvas>

편의상, 그리고 XAML과 XML의 일반적인 관계에 따라 개체가 다른 개체를 포함하지 않을 경우에는 다음 예제의 <Rectangle /> 태그와 같이 여는 태그/닫는 태그 쌍 대신 한 개의 자체적으로 닫는 태그를 사용하여 개체 요소를 선언할 수 있습니다.

<Canvas>
  <Rectangle />
</Canvas>

특성 구문을 사용하여 개체 선언

속성 값이 문자열과 같은 언어 기본 형식이 아닌 일부 경우에는 속성을 설정하는 개체를 인스턴스화하고 새 개체를 정의하는 키 속성을 초기화하는 작업을 특성 구문을 사용하여 수행할 수 있습니다. 이 동작은 속성 설정과 연결되기 때문에 특성 구문을 사용하여 개체를 선언하고 개체의 속성을 설정하는 작업을 구문상으로 한 번에 수행하는 방법에 대한 자세한 내용은 다음 섹션을 참조하세요.

초기화 텍스트

경우에 따라서는 생성에 필요한 초기 값을 제공하는 포함된 내부 텍스트와 함께 개체를 선언할 수 있습니다. XAML에서는 이 방법과 구문을 초기화 텍스트라고 합니다. 개념적으로 초기화 텍스트는 매개 변수가 있는 생성자 호출과 유사하지만 내부 XAML 파서 구현에서는 대체로 이 작업을 문자 그대로 수행하지 않습니다.

초기화 텍스트는 Windows Phone 에서 일부 구조체의 초기 값을 설정하는 데 유용합니다. 구조체 값을 여러 대상 속성에 공유하기 위해 구조체 인스턴스가 리소스 사전 내에 만들어지도록 하려면 이 방법을 사용합니다. 특정 구조체에서는 특성 구문을 사용하여 구조체의 값을 설정할 수 없습니다. 이 문제가 있는 구조체는 GridLength, Color 등이 있습니다.

개체 요소 구문을 사용하여 선언한 개체에 속성을 설정할 수 있습니다. XAML에서 속성을 설정하는 방법에는 여러 가지가 있습니다.

  • 특성 구문 사용

  • 속성 요소 구문 사용

  • 콘텐츠 요소 구문 사용

  • 컬렉션 구문(일반적으로 암시적 컬렉션 구문) 사용

개체 선언의 경우와 마찬가지로, XAML에서 개체 속성을 설정하기 위한 위의 방법을 모두 특정 속성을 설정하는 데 사용할 수 있는 것은 아닙니다. 몇몇 속성은 어느 한 가지 방법만 지원합니다. 또 다른 몇몇 속성은 여러 가지 방법을 지원할 수 있습니다. 예를 들어 콘텐츠 요소 구문을 지원하는 속성은 속성 요소 구문을 통한 보다 자세한 형식이나 대체 특성 구문도 지원할 수 있습니다. 속성 및 속성에서 사용하는 개체 형식에 따라 지원되는 방법이 달라집니다. XAML 구문의 지원 여부는 XAML에서 설정할 수 있는 각 속성에 대한 참조 페이지에서 "XAML 사용" 섹션을 참조하세요. 또한 Windows Phone 의 개체에는 XAML에서 위의 어떤 방법으로도 설정할 수 없고 코드를 사용해서만 설정할 수 있는 속성도 있습니다.

읽기 전용 속성은 추가 메커니즘이 적용되지 않으면 XAML에서든 코드에서든 어떤 방법으로도 설정할 수 없습니다. 적용 가능한 추가적 메커니즘으로는 속성의 내부 표현으로 설정되는 생성자 오버로드를 호출하거나, 엄밀하게는 속성 접근자나 계산 속성이 아닌 도우미 메서드를 호출하는 방법이 있습니다. 계산 속성은 설정 가능한 다른 속성의 값 및 해당 속성 값에 서비스 또는 동작이 미치는 영향에 의존하며, 이러한 기능은 종속성 속성 시스템에서 사용할 수 있습니다. 종속성 속성에 대한 자세한 내용은 Windows Phone 8의 종속성 속성를 참조하세요.

XAML의 컬렉션 구문은 읽기 전용 속성을 설정하는 것처럼 보이지만 사실은 그렇지 않습니다. 자세한 내용은 이 항목의 "컬렉션 구문을 사용하여 속성 설정" 섹션을 참조하세요.

특성 구문을 사용하여 속성 설정

다음 구문을 사용합니다. 여기서 objectName은 인스턴스화할 개체이고, propertyName은 이 개체에 설정할 속성의 이름이며, propertyValue는 속성에 설정할 값입니다.

<objectName propertyName="propertyValue" .../>

-or-

<objectName propertyName="propertyValue">

...<!--element children -->

</objectName>

두 구문 중 하나를 사용하여 개체를 선언하고 개체에 속성을 설정할 수 있습니다. 첫 번째 예제는 태그에 포함된 단일 요소이지만 XAML 프로세서가 이 태그를 구문 분석하는 방식은 실제로는 별개의 몇 단계로 이루어집니다. 먼저, 개체 요소가 존재한다는 것은 새 objectName 개체를 인스턴스화해야 함을 나타냅니다. 이러한 인스턴스가 있어야만 인스턴스에 인스턴스 속성 propertyName을 설정할 수 있습니다.

다음 예제에서는 네 가지 특성에 대해 특성 구문을 사용하여 Rectangle 개체의 Name, Width, HeightFill 속성을 설정합니다.

<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue" />

XAML 파서가 이 태그를 해석하고 개체 트리를 정의하는 방식을 직접 본 적이 있다면 동일한 기능을 제공하는 코드는 다음 의사 코드와 비슷할 것입니다.

Rectangle rectangle1 = new Rectangle();

rectangle1.Width=100.0;

rectangle1.Height=100.0;

rectangle1.Fill = new SolidColorBrush(Colors.Blue);

첫 번째 줄에서는 기본 생성자를 호출합니다. Name의 값은 생성자 결과를 할당할 인스턴스 이름으로 사용됩니다.

Name을 제외하고 두 번째 줄부터 네 번째 줄까지의 실제 할당 순서는 위 의사 코드에서의 순서와 다를 수 있습니다. XAML 규칙에 따르면 XAML 파서는 인스턴스가 만들어진 후에 임의 순서에 따라 이러한 속성을 설정할 수 있습니다.

속성 요소 구문을 사용하여 속성 설정

많은 Windows Phone 속성은 속성 요소 구문을 사용하여 설정할 수 있습니다. 속성 요소 구문을 사용하려면 개체 요소의 새 인스턴스를 지정하여 속성 요소 값을 채울 수 있어야 합니다.

속성 요소 구문을 사용하려면 설정할 속성에 대한 XML 요소를 만듭니다. 이러한 요소는 <object.property> 형식입니다. 표준 XML에서는 이 요소가 단순히 이름에 점이 있는 요소로 간주되지만, XAML에서는 요소 이름의 점을 통해 요소가 속성 요소로 식별되며 따라서 propertyobject의 속성이 됩니다.

다음 문법에서 property는 설정할 속성의 이름이고 propertyValueAsObjectElement는 속성에 필요한 값 형식의 새로운 개체를 선언하는 새 개체 요소입니다.

<object>

<개체.속성>

propertyValueAsObjectElement

</개체.속성>

</개체>

다음 예제에서는 속성 요소 구문을 사용하여 RectangleSolidColorBrush 개체 요소로 채웁니다. SolidColorBrush 내의 Color는 특성 구문을 사용하여 설정됩니다. 이 XAML의 렌더링된 결과는 특성 구문을 사용하여 Fill을 설정하는 앞의 XAML 예제와 같습니다.

<Rectangle
  Name="rectangle1"
  Width="100" 
  Height="100"
> 
  <Rectangle.Fill> 
    <SolidColorBrush Color="Blue"/> 
  </Rectangle.Fill>
</Rectangle>

XAML 콘텐츠 구문을 사용하여 속성 설정

일부 Windows Phone 형식은 XAML 콘텐츠 요소 구문을 사용할 수 있게 하는 속성을 정의합니다. XAML 콘텐츠 요소 구문에서는 속성에 대해 속성 요소를 생략할 수 있고 소유 형식의 개체 요소 태그 내에 있는 콘텐츠를 제공하여 속성을 설정할 수 있습니다. 이 콘텐츠는 일반적으로 하나 이상의 개체 요소입니다. 이를 XAML 콘텐츠 구문이라고 합니다. XAML 콘텐츠 구문을 사용할 수 있는 경우 Windows Phone 참조 설명서에서 해당 속성에 대한 "XAML 사용" 섹션에 해당 구문이 제시됩니다.

예를 들어 Border에 대한 Child 속성 페이지에서는 Border의 단일 개체 Child 값을 설정하는 XAML 콘텐츠 구문을 속성 요소 구문 대신 보여 줍니다. 다음 예제는 이러한 사용법을 유사하게 보여 줍니다.

<Border>
  <Button .../>
</Border>

XAML 콘텐츠 속성으로 선언된 속성에서 "느슨한" 개체 모델도 지원하여 해당 속성의 형식이 Object이거나 구체적으로 String인 경우 XAML 콘텐츠 구문은 순수한 문자열을 여는 개체 태그와 닫는 개체 태그 사이에 콘텐츠로 배치하는 데 사용될 수 있습니다. 예를 들어 TextBlock에 대한 Text 속성 페이지에서는 특성 구문 대신 XAML 콘텐츠 구문을 사용하여 Text의 문자열 값을 설정하는 대체 XAML 구문을 보여 줍니다. 다음 예제는 이러한 사용법을 유사하게 보여 주며 Text 속성을 명시적으로 지정하지 않은 채 TextBlockText 속성을 설정합니다. Text는 특성을 사용하거나 개체 요소를 선언하는 대신 콘텐츠 또는 "내부 텍스트"로 간주될 XML을 사용하여 설정됩니다.

<TextBlock>Hello!</TextBlock>

컬렉션 구문을 사용하여 속성 설정

XAML에는 컬렉션 구문의 여러 가지 변형이 있습니다. 얼핏 보면 XAML은 읽기 전용 컬렉션 속성을 설정할 수 있도록 하는 것 같지만 실제로는 항목을 기존 컬렉션에 추가할 수 있도록 합니다. XAML 언어 및 XAML 지원을 구현하는 XAML 프로세서는 이 구문을 사용할 수 있게 하기 위해 지원되는 컬렉션 형식의 규칙에 의존합니다.

일반적으로 XAML 구문에서는 컬렉션 항목(인덱서 또는 Items 속성)을 저장하는 컬렉션 형식의 속성이 없습니다. 컬렉션의 경우 XAML의 컬렉션을 사용하여 컬렉션에 의미 있는 어떤 작업을 수행하기 위해 정말로 필요한 요소가 반드시 속성인 것은 아니며 실제로 필요한 요소는 Add 메서드입니다. 위에서 언급한 규칙이 바로 Add 메서드를 호출하는 것입니다. XAML 프로세서가 XAML 컬렉션 구문 내에서 하나 이상의 개체 요소를 발견하면 개체 태그 지정을 사용하여 해당 개체가 먼저 만들어진 다음 컬렉션의 Add 메서드를 호출하여 새로운 각각의 개체가 선언된 순서에 따라 이를 포함하는 컬렉션에 추가됩니다.

다음 예제에서는 생성 가능한 컬렉션 형식을 사용하는 컬렉션 속성을 보여 줍니다. XAML에서는 실제 컬렉션을 개체 요소로 정의하고 초기화할 수 있습니다.

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <!-- Here the GradientStopCollection tag is specified. -->
    <GradientStopCollection>
      <GradientStop Offset="0.0" Color="Red" />
      <GradientStop Offset="1.0" Color="Blue" />
    </GradientStopCollection>
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

그러나 컬렉션을 사용하는 Windows Phone 속성의 경우 XAML 파서는 컬렉션이 포함된 속성을 통해 컬렉션의 지원 형식을 암시적으로 파악할 수 있습니다. 따라서 다음 예제에 나온 것처럼 컬렉션 자체에 대한 개체 요소는 생략할 수 있습니다.

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <!-- no explicit new GradientStopCollection, parser knows how to find or create -->
    <GradientStop Offset="0.0" Color="Red" />
    <GradientStop Offset="1.0" Color="Blue" />
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>

컬렉션 속성인 동시에 클래스에 대한 XAML 콘텐츠 속성으로 식별되는 속성도 있습니다. 앞의 예제에서 사용된 GradientStops 속성 및 여러 가지 다른 Windows Phone 속성이 그와 같은 경우에 해당합니다. 이러한 구문에서는 속성 요소를 생략할 수도 있습니다. 결과적으로 다음과 같이 태그가 표시됩니다.

<LinearGradientBrush>
  <GradientStop Offset="0.0" Color="Red" />
  <GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush>

컬렉션 구문과 콘텐츠 구문의 이와 같은 조합은 패널, 뷰 또는 항목 컨트롤과 같은 컨트롤 합성에 광범위하게 사용되는 클래스에서 흔히 볼 수 있습니다. 예를 들어 다음 예제에서는 명시적 XAML과 한 StackPanel 내에 두 UI 요소를 합성하기 위한 가장 간단한 XAML을 보여 줍니다.

<!--explicit tags, and UIElementCollection commented-->
<StackPanel>
  <StackPanel.Children>
    <!--UIElementCollection-->
    <TextBlock>Hello</TextBlock>
    <TextBlock>World</TextBlock>
    <!--/UIElementCollection-->
  </StackPanel.Children>
</StackPanel>

<!--simple-->
<StackPanel>
  <TextBlock>Hello</TextBlock>
  <TextBlock>World</TextBlock>
</StackPanel>

명시적 구문에서 주석으로 처리된 UIElementCollection을 주의해서 살펴보세요. 주석으로 처리된 이유는 개체 트리에 해당 컬렉션이 있더라도 XAML에서는 이를 명시적으로 지정할 수 없기 때문입니다. UIElementCollection은 생성 가능한 클래스가 아니므로 명시적으로 지정하지 못하는 것입니다. 런타임 개체 트리에서 가져오는 값은 소유 클래스에 있는 기본 초기화 값이고, 이 값은 초기화 이후에 변경할 수 없습니다. 컬렉션 클래스를 의도적으로, 그리고 명시적으로 태그에 포함하는 경우가 있습니다. 코드에서 보다 쉽게 참조할 수 있도록 컬렉션에 x:Name을 지정하는 경우를 예로 들 수 있습니다. 그러나 지원 형식의 특성 때문에 또는 읽기 전용 컬렉션 속성을 채우기 때문에 XAML 파서에서 생성할 수 없는 컬렉션 클래스는 명시적으로 선언하지 않도록 주의하세요.

특성 구문과 속성 요소 구문 중 속성 설정에 사용할 구문 결정

XAML에서 설정할 수 있는 모든 속성은 특성 구문이나 속성 요소 구문을 통한 직접적인 값 설정을 지원하지만, 두 구문을 모두 지원하지는 않을 수도 있습니다. 일부 속성은 두 구문 중 하나를 지원하고 다른 일부 속성은 앞에 나오는 Text에 대한 콘텐츠 요소 구문과 같은 추가 구문 옵션을 지원합니다. 속성에서 지원하는 XAML 구문은 일정 부분 속성에서 해당 속성 형식으로 사용하는 개체의 형식에 의존합니다. 속성 형식이 double, integer 또는 string과 같은 기본 형식이면 항상 특성 구문이 지원됩니다.

다음 예제에서는 특성 구문을 사용하여 Rectangle의 너비를 설정합니다. Width 속성은 속성 값 형식이 double이므로 특성 구문을 지원합니다.

<Rectangle Width="100" />

속성을 설정하는 데 사용할 개체 형식을 문자열 형식 변환을 통해 생성할 수 있는 경우에는 특성 구문을 사용하여 속성을 설정할 수도 있습니다. 기본 형식의 경우 항상 이렇게 속성을 설정합니다. 그러나 다른 몇몇 개체 형식도 개체 요소 구문을 사용하는 대신 특성 값으로 지정된 문자열을 사용하여 만들 수 있습니다. 이때는 해당 속성에서 지원하거나 해당 속성 형식에서 일반적으로 지원하는 내부 형식 변환을 사용합니다. 특성의 문자열 값이 구문 분석되며 이 문자열 정보를 사용하여 새 개체의 초기화에 필요한 속성이 설정됩니다. 특정 형식 변환기는 문자열의 정보를 처리하는 고유한 방식에 따라 공통 속성 형식의 다양한 서브클래스를 만들 수도 있습니다. 이 동작을 지원하는 개체 형식에는 설명서의 구문 섹션에 나오는 특수한 문법이 사용됩니다.

다음 예제에서는 특성 구문을 사용하여 Rectangle의 채우기를 설정합니다. Fill 속성은 SolidColorBrush를 사용하여 속성을 설정하는 데 특성 구문을 사용할 수 있도록 지원합니다. Fill 속성을 지원하는 Brush 추상 형식은 형식 변환 문법을 지원하기 때문입니다. 이 형식 변환 문법은 해당 Color로 특성에 지정된 문자열을 사용하여 초기화된 SolidColorBrush를 만들 수 있습니다. 이 예제에 대한 자세한 내용은 BrushSolidColorBrush를 참조하세요.

<Rectangle Width="100" Height="100" Fill="Blue" />

속성을 설정하는 데 사용하는 개체가 개체 요소 구문을 지원할 경우 속성 요소 구문을 사용하여 속성을 설정할 수 있습니다. 개체가 개체 요소 구문을 지원하면 속성도 속성 요소 구문을 지원합니다. 다음 예제에서는 속성 요소 구문을 사용하여 Rectangle의 채우기를 설정합니다. Fill 속성은 SolidColorBrush를 사용하여 속성을 설정하는 데 속성 요소 구문을 사용할 수 있도록 지원합니다. SolidColorBrush는 개체 요소 구문을 지원하며, Brush 형식을 사용하여 속성 값이 설정되어야 한다는 속성 요구 사항을 만족하기 때문입니다. SolidColorBrush에는 특성 구문을 사용하여 설정된 Color 속성도 있습니다. 이 XAML의 렌더링된 결과는 특성 구문을 사용하여 Fill을 설정하는 앞의 XAML 예제와 같습니다.

<Rectangle Width="100" Height="100">
  <Rectangle.Fill>
    <SolidColorBrush Color="Blue"/>
  </Rectangle.Fill>
</Rectangle>

Brush 형식 변환기로 인해, SolidColorBrush는 리소스 참조나 바인딩 같은 태그 확장 사용 없이 새 Fill 값에 대한 속성 요소 구문이나 특성 구문 중 하나를 선택할 수 있는 유일한 Brush입니다. Fill을 설정하는 데 사용할 수 있는 다른 Brush 형식의 경우 해당 형식의 Brush를 만드는 데 사용할 수 있는 형식 변환기 동작이 없습니다. 따라서 ImageBrush와 같은 브러시 형식을 사용하여 Fill을 설정하려면 Fill에 대한 속성 요소 구문을 사용하고 ImageBrush를 개체 요소로 선언하여 속성 값을 제공하거나, 다음 섹션에서 설명하는 태그 확장을 사용해야 합니다.

<Rectangle Width="100" Height="100">
  <Rectangle.Fill>
    <ImageBrush ImageSource="forest.jpg"/>
  </Rectangle.Fill>
</Rectangle>

태그 확장은 Windows Phone XAML 구현에서 주로 사용되는 XAML 언어 개념입니다. XAML 특성 구문에서 중괄호({})는 태그 확장 사용을 나타냅니다. 이는 특성 값의 일반적인 처리를 리터럴 문자열 또는 직접 문자열 변환 가능 값으로 이스케이프하도록 XAML 처리에 지시합니다. 대신 파서는 일반적으로 해당 태그 확장을 지원하는 코드를 호출하여 태그에서 개체 트리를 생성합니다.

Windows Phone 은 기본 Windows Phone XAML 네임스페이스에 정의되고 해당 XAML 파서에서 인식하는 다음과 같은 태그 확장을 지원합니다.

  • Binding: 속성 값이 데이터 컨텍스트에 따라 해석될 때까지 속성 값을 지연시키는 데이터 바인딩을 지원합니다.

  • StaticResource: ResourceDictionary에 정의된 리소스 값을 참조할 수 있도록 지원합니다.

  • TemplateBinding: 템플릿 개체의 코드 속성과 상호 작용할 수 있는 컨트롤 템플릿을 XAML에서 지원합니다.

  • RelativeSource: 특정 형식의 템플릿 바인딩을 사용할 수 있게 합니다.

Windows Phone 은 XAML 언어 XAML 네임스페이스인 x:Null에 정의되어 있는 매우 기본적인 태그 확장도 지원합니다.

형식에 변환기가 없고 참조 형식 값을 사용하는 속성에는 항상 새 인스턴스를 만드는 속성 요소 구문 또는 태그 확장을 통한 개체 참조가 필요합니다. Windows Phone 태그 확장은 일반적으로 앱용 개체 그래프의 다른 부분에서 가져온 기존 인스턴스를 반환하거나 런타임까지 값을 지연시킵니다. 태그 확장을 사용하여 XAML에서 설정할 수 있는 모든 속성을 특성 구문에서도 설정할 수 있습니다. 특성 구문을 사용하면 속성이 직접 개체 인스턴스화를 위한 특성 구문을 지원하지 않더라도 속성에 대한 참조 값을 제공할 수 있습니다. 또는 XAML 속성을 값 형식 또는 just-in-time으로 생성된 참조 형식으로 채워야 하는 일반적인 요구 사항을 지연하는 특정 동작을 사용할 수 있습니다.

예를 들어 다음 XAML에서는 특성 구문을 사용하여 BorderStyle 속성 값을 설정합니다. Style 속성은 기본적으로 특성 구문 문자열을 사용하여 만들 수 없는 참조 형식인 Style 클래스의 인스턴스를 사용합니다. 하지만 이 경우 특성은 특정 태그 확장인 StaticResource를 참조합니다. 해당 태그 확장이 처리되면 이전에 리소스 사전에서 키가 지정된 리소스로 정의된 스타일에 대한 참조를 반환합니다.

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

여러 경우에서 태그 확장은 기존 개체를 참조하는 값을 제공하는 데 사용되거나 속성이 특성 형식으로 설정되도록 하는 개체를 제공할 수 있습니다.

Windows Phone 에서는 사용자 지정 태그 확장을 정의할 수 있게 하는 기본 클래스가 도입되었습니다.

리터럴 "{" 값

여는 중괄호 기호 {는 태그 확장 시퀀스의 시작이므로 {로 시작하는 리터럴 문자열 값을 지정하려면 이스케이프 시퀀스를 사용해야 합니다. 이스케이프 시퀀스는 {}입니다. 예를 들어 단일의 여는 중괄호인 문자열 값을 지정하려면 특성 값을 {}{로 지정합니다. { 값을 문자열로 제공해야 하는 일부 경우에는 대체 따옴표를 사용할 수도 있습니다(예: ""로 구분된 특성 값 내에 ' 사용).

형식 변환기는 개념적 엔터티로서 XAML에서 특성 값을 가져오고 문자열 값을 사용하여 리터럴 문자열이 아닌 결과 값을 만듭니다. 형식 변환기는 개체의 지원 형식과 연결되고 때로는 개체의 특정 속성과 연결됩니다. 형식 변환기에 액세스하기 위해 XAML 태그에서 특별한 사용법이 필요한 것은 아닙니다. XAML 프로세서는 해당 XAML 프로세서에서 수행하는 일반적인 형식 매핑 동작의 일부로서 지원 형식을 읽고, 이 형식이 형식 변환기를 지원하는지 여부를 확인한 후 값을 가져올 필요가 있는 경우에 해당 형식 변환기를 호출합니다.

"속성 설정" 섹션에서 이미 언급했듯이 형식 변환기는 특성 구문이 사용되지 않으면 속성 구문이 필요한 경우에 특성 구문을 사용할 수 있게 합니다. 이렇게 하면 일반적으로 태그 형식이 단순해집니다. 일부 형식 변환기의 경우 변환을 위한 동작이 상대적으로 간단합니다. 예를 들어 NullableBoolConverterNullable<bool> 값의 가능한 세 가지 상태를 문자열 true, false{x:Null}로 지정할 수 있게 지원합니다. 형식 변환기를 통해 사용할 수 있게 되는 XAML 구문은 일반적으로 Windows Phone 참조 설명서에서 지원 TypeConverter 클래스에 있지 않습니다. 대신, 형식 변환기 지원 구문을 사용할 수 있는 각 개체 또는 속성에 대한 참조 페이지에서 특성 구문에 대한 자세한 내용을 확인할 수 있습니다. 일반적으로 TypeConverter 메서드를 Windows Phone 에서 직접 호출할 필요는 없습니다.

많지는 않지만 일부 형식 변환기에서는 완전한 이해를 위해 구문 또는 문법 가이드가 필요할 수도 있는 비교적 복잡한 "미니 언어"를 지원합니다.

Windows Phone 에서 형식 변환기는 대부분 XAML을 위한 지원 클래스로서 존재하며 사용자 지정 형식을 지원하려는 형식 변환기 작성자를 위해 기본 클래스로서 기능합니다.

XAML은 개체 및 개체 속성을 선언하기 위한 언어이지만 태그에서 개체에 이벤트 처리기를 연결하기 위한 구문도 제공합니다. XAML 이벤트 구문 규칙은 XAML 선언된 이벤트 이벤트를 프로그래밍 모델을 통해 통합하는 Windows Phone 같은 특정 기술에 의해 나중에 확장될 수 있습니다. 이벤트가 처리되는 개체에서 특성 이름으로 관련 이벤트 이름을 지정합니다. 특성 값으로는 코드에서 정의하는 이벤트 처리기 함수의 이름을 지정합니다. XAML 프로세서는 이 이름을 사용하여 로드된 개체 트리에서 대리자 표현을 만들고 지정된 처리기를 내부 처리기 목록에 추가합니다.

대부분의 Windows Phone 앱은 태그와 코드 숨김 소스 둘 모두를 통해 생성됩니다. 프로젝트에서 XAML은 .xaml 파일로 작성되며 코드 숨김 파일은 Visual Basic 또는 C# 등의 CLR 언어를 사용하여 작성합니다. XAML 파일이 Windows Phone 프로젝트에 대한 빌드 작업의 일부로 태그 컴파일될 때 각 XAML 페이지에 대한 XAML 코드 숨김 파일의 위치는 네임스페이스와 클래스를 XAML 페이지 루트 요소의 x:Class 특성으로 지정하여 식별합니다.

ResourceDictionary는 일반적으로 XAML에서 전체 리소스 사전을 작성하여 만듭니다. 그러나 리소스 사전 및 이 사전의 사용법은 개념적으로 방대한 영역이며 이 항목의 범위를 벗어납니다.

XAML 언어는 기능적 측면에서 XML 언어를 기반으로 합니다. 유효한 XAML 파일은 정의상 모두 유효한 XML 파일입니다. 그러나 XAML은 XML을 대폭 확장하기도 합니다. 특히 XAML에서는 지원 형식 개념과의 관계 때문에 스키마 개념을 상당히 다르게 처리하고 연결된 멤버 및 태그 확장 같은 언어 요소를 추가합니다. xml:lang은 XAML에서 유효하기는 하지만 구문 분석 동작보다 런타임에 영향을 미치고 일반적으로 프레임워크 수준 속성에 별칭으로 지정됩니다. 자세한 내용은 FrameworkElement.Language를 참조하세요. xml:base는 태그에서는 유효하지만 Windows Phone XAML에서 무시됩니다. xml:space는 유효하지만 공백 처리 섹션에 설명된 시나리오에만 적용됩니다. encoding 특성은 XAML에서 유효합니다. UTF-8 및 UTF-16 인코딩만 지원됩니다. UTF-32는 지원되지 않습니다.

XAML에서의 대/소문자 구분

XAML은 대/소문자를 구분하는 언어입니다. 이러한 특징 역시 XAML이 대/소문자를 구분하는 XML을 기반으로 하기 때문입니다. XAML 요소 및 특성의 이름은 대/소문자를 구분합니다. 특성 값도 대/소문자를 구분할 수 있으며, 대/소문자 구분 여부는 특정 속성에 대해 특성 값이 처리되는 방식에 따라 달라집니다. 예를 들어 특성 값에서 열거형 멤버 이름을 선언할 경우 대/소문자를 구분하지 않는 열거형 멤버 값을 반환하도록 멤버 이름 문자열의 형식을 변환하는 것이 기본 동작입니다. 이와는 반대로 Name 속성 값과, Name 속성에서 선언하는 이름을 기반으로 개체에 대한 작업을 수행하는 유틸리티 메서드에서는 이름 문자열을 대/소문자를 구분하여 처리합니다.

XML에서와 마찬가지로 XAML의 공백 문자는 공백, 줄 바꿈 및 탭이며, 이러한 값은 각각 유니코드 값 0020, 000A, 및 0009에 해당합니다.

XAML 프로세서가 XAML 파일의 요소 사이에 발견되는 모든 내부 텍스트를 처리하면 기본적으로 공백이 다음과 같이 정규화됩니다.

  • 동아시아 문자 사이의 줄 바꿈 문자가 제거됩니다. "동아시아 문자"에 대한 정의는 이 항목 아래쪽의 동아시아 문자 섹션을 참조하세요.

  • 모든 공백 문자(공백, 줄 바꿈, 탭)가 공백으로 변환됩니다.

  • 연속되는 모든 공백이 삭제되고 단일 공백으로 바뀝니다.

  • 시작 태그 바로 다음에 오는 공백이 삭제됩니다.

  • 끝 태그 바로 앞에 오는 공백이 삭제됩니다.

여기서 "기본"이란 의미는 xml:space 특성의 기본값이 나타내는 상태에 해당합니다.

내부 텍스트의 공백 및 문자열 기본 형식

위의 정규화 규칙은 XAML 요소 안에 있는 내부 텍스트에 적용됩니다. 정규화를 수행한 후 XAML 프로세서는 다음과 같이 모든 내부 텍스트를 적절한 형식으로 변환합니다.

  • 속성의 형식이 컬렉션이 아니지만 Object 형식이 아니면 XAML 프로세서는 형식 변환기를 통해 해당 형식으로 변환하려고 시도합니다. 변환이 실패하면 XAML 파서 오류가 발생합니다.

  • 속성이 컬렉션 형식이고 내부 텍스트가 연속적(중간에 요소 태그가 없음)이면 내부 텍스트가 단일 String으로 구문 분석됩니다. 컬렉션 형식에 String이 허용되지 않는 경우에도 XAML 파서 오류가 발생합니다.

  • 속성의 형식이 Object이면 내부 텍스트가 단일 String으로 구문 분석됩니다. Object 형식은 String 등의 단일 개체를 나타내므로 중간에 요소 태그가 있으면 XAML 파서 오류가 발생합니다.

  • 속성의 형식이 컬렉션이고 내부 텍스트가 연속적이지 않으면 첫 번째 부분 문자열이 String으로 변환되어 컬렉션 항목으로 추가되고, 중간 요소가 컬렉션 항목으로 추가된 다음 마지막 부분 문자열(있는 경우)이 컬렉션에 세 번째 String 항목으로 추가됩니다.

공백 및 텍스트 콘텐츠 모델

실제로 공백 유지 문제는 사용할 수 있는 모든 콘텐츠 모델 중 일부에서만 문제가 됩니다. 특정 폼에서 singleton String 형식을 사용하거나, 전용 String 컬렉션을 사용하거나, 목록, 컬렉션 또는 사전에서 String과 다른 형식을 혼합하여 사용할 수 있는 콘텐츠 모델이 이에 해당합니다.

이러한 콘텐츠 모델은 문자열을 사용할 수 있는 경우에도 기본적으로 남아 있는 공백을 유효한 문자로 처리하지 않습니다.

일반적으로 공백을 유효하게 처리하는 컨트롤이나 다른 형식에 대한 자세한 내용은 Windows Phone의 텍스트 및 글꼴을 참조하세요.

공백 유지

최종적으로 표시될 때 XAML 프로세서 공백 정규화의 영향을 받지 않도록 여러 가지 방법으로 소스 XAML에 공백을 유지할 수 있습니다.

xml:space="preserve": 이 특성은 공백을 유지할 요소의 수준에서 지정합니다. 이 특성을 사용하면 코드 편집 앱에서 태그 요소를 한 눈에 이해하기 쉬운 중첩 구조로 정렬하기 위해 추가하는 공백을 포함하여 모든 공백이 유지됩니다. 그러나 공백이 렌더링되는지 여부는 포함하는 요소의 콘텐츠 모델에 따라 달라집니다. 대부분의 개체 모델에서는 공백이 중요한 항목으로 인식되지 않기 때문에 xml:space="preserve"를 루트 수준에서 지정하지 않는 것이 좋습니다. 이 특성은 문자열 내의 공백을 렌더링하는 요소 또는 유효한 공백 컬렉션인 요소의 수준에서만 설정하는 것이 좋습니다.

엔터티 및 줄 바꿈하지 않는 공백: XAML에서는 텍스트 개체 모델 내에 유니코드 엔터티를 삽입할 수 있습니다. 줄 바꿈하지 않는 공백(UTF-8 인코딩의 경우 &#160;)과 같은 전용 엔터티를 사용하거나, 줄 바꿈하지 않는 공백 문자를 지원하는 서식 있는 텍스트 컨트롤을 사용할 수도 있습니다. 엔터티의 런타임 출력은 패널과 여백을 제대로 사용했는지 여부와 같은 일반적인 레이아웃 기능에 비해 더 많은 요인의 영향을 받을 수 있기 때문에 엔터티를 사용하여 들여쓰기 같은 레이아웃 특성을 시뮬레이션할 때는 주의해야 합니다.

동아시아 문자

"동아시아 문자"는 U+20000 - U+2FFFD 및 U+30000 - U+3FFFD 범위의 유니코드 문자 집합으로 정의되며 이 하위 집합을 "CJK ideographs"라고도 합니다. 자세한 내용은 http://www.unicode.org를 참조하세요.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft