다음을 통해 공유


XAML 구문 가이드

XAML 구문 규칙 및 XAML 구문에 사용할 수 있는 제한 사항 또는 선택 항목을 설명하는 용어를 설명합니다. XAML 언어를 새로 사용하거나, 용어 또는 구문 부분에 대한 새로 고침을 원하거나, XAML 언어의 작동 방식에 대해 궁금하고 더 많은 배경 및 컨텍스트를 원하는 경우 이 항목이 유용합니다.

XAML is XML

XAML(Extensible Application Markup Language)에는 XML을 기반으로 하는 기본 구문이 있으며 정의상 유효한 XAML은 유효한 XML이어야 합니다. 그러나 XAML에는 XML을 확장하는 고유한 구문 개념도 있습니다. 지정된 XML 엔터티는 일반 XML에서 유효할 수 있지만 해당 구문은 XAML과 다른 완전한 의미를 가질 수 있습니다. 이 항목에서는 이러한 XAML 구문 개념에 대해 설명합니다.

XAML 어휘

XAML이 대부분의 XML 사용과 다른 한 가지 영역은 XAML이 일반적으로 XSD 파일과 같은 스키마에 적용되지 않는다는 것입니다. XAML은 확장 가능하기 때문입니다. 즉, XAML 머리글자어의 "X"가 의미하는 바입니다. XAML이 구문 분석되면 XAML에서 참조하는 요소와 특성은 Windows 런타임 정의된 핵심 형식 또는 Windows 런타임 확장하거나 기반으로 하는 형식에서 일부 지원 코드 표현에 존재해야 합니다. SDK 설명서는 경우에 따라 Windows 런타임 이미 기본 제공된 형식을 참조하며 XAML에서 Windows 런타임 대한 XAML 어휘사용할 수 있습니다. Microsoft Visual Studio를 사용하면 이 XAML 어휘 내에서 유효한 태그를 생성할 수 있습니다. Visual Studio는 이러한 형식의 원본이 프로젝트에서 올바르게 참조되는 한 XAML 사용에 대한 사용자 지정 형식을 포함할 수도 있습니다. XAML 네임스페이스에 대한 자세한 내용은 XAML 네임스페이스 및 네임스페이스 매핑을 참조하세요.

개체 선언

프로그래머는 개체와 멤버를 기준으로 생각하는 경우가 많지만 태그 언어는 요소 및 특성으로 개념화됩니다. 가장 기본적인 의미에서 XAML 태그에서 선언하는 요소는 백업 런타임 개체 표현의 개체가 됩니다. 앱에 대한 런타임 개체를 만들려면 XAML 태그에서 XAML 요소를 선언합니다. 개체는 Windows 런타임 XAML을 로드할 때 만들어집니다.

XAML 파일에는 항상 루트 역할을 하는 요소가 정확히 하나 있으며, 이는 페이지와 같은 일부 프로그래밍 구조의 개념적 루트가 될 개체 또는 애플리케이션의 전체 런타임 정의에 대한 개체 그래프를 선언합니다.

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

  • 직접 개체 요소 구문 사용: 여는 태그와 닫는 태그를 사용하여 개체를 XML 형식 요소로 인스턴스화합니다. 이 구문을 사용하여 루트 개체를 선언하거나 속성 값을 설정하는 중첩된 개체를 만들 수 있습니다.
  • 간접적으로 특성 구문 사용: 개체를 만드는 방법에 대한 지침이 포함된 인라인 문자열 값을 사용합니다. XAML 파서는 이 문자열을 사용하여 속성 값을 새로 만든 참조 값으로 설정합니다. 지원은 특정 공통 개체 및 속성으로 제한됩니다.
  • 태그 확장 사용하기

그렇다고 해서 XAML 어휘에서 개체를 만들기 위한 구문을 항상 선택할 수 있는 것은 아닙니다. 일부 개체는 개체 요소 구문을 사용해야만 만들 수 있습니다. 일부 개체는 특성에서 처음 설정해야만 만들 수 있습니다. 실제로 개체 요소 또는 특성 구문을 사용하여 만들 수 있는 개체는 XAML 어휘에서 비교적 드뭅니다. 두 구문 형식이 모두 가능하더라도 스타일 문제로 구문 중 하나가 더 일반적입니다. XAML에서 새 값을 만드는 대신 기존 개체를 참조하는 데 사용할 수 있는 기술도 있습니다. 기존 개체는 XAML의 다른 영역에서 정의되거나 플랫폼 및 해당 애플리케이션 또는 프로그래밍 모델의 일부 동작을 통해 암시적으로 존재할 수 있습니다.

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

개체 요소 구문을 사용하여 개체를 선언하려면 다음과 <objectName> </objectName>같은 태그를 작성합니다. 여기서 objectName 은 인스턴스화하려는 개체의 형식 이름입니다. Canvas 개체를 선언하는 개체 요소 사용법은 다음과 같습니다.

<Canvas>
</Canvas>

개체에 다른 개체가 포함되지 않은 경우 여는 태그/닫는 태그 쌍 대신 하나의 자체 닫는 태그를 사용하여 개체 요소를 선언할 수 있습니다. <Canvas />

컨테이너

Canvas와 같은 UI 요소로 사용되는 많은 개체에는 다른 개체가 포함될 수 있습니다. 이를 컨테이너라고도 합니다. 다음 예제에서는 하나의 요소인 사각형을 포함하는 Canvas 컨테이너를 보여 줍니다.

<Canvas>
  <Rectangle />
</Canvas>

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

이 동작은 속성 설정과 관련이 있으므로 향후 섹션에서 이에 대해 자세히 살펴보겠습니다.

초기화 텍스트

일부 개체의 경우 생성에 대한 초기화 값으로 사용되는 내부 텍스트를 사용하여 새 값을 선언할 수 있습니다. XAML에서 이 기술과 구문을 초기화 텍스트라고 합니다. 개념적으로 초기화 텍스트는 매개 변수가 있는 생성자를 호출하는 것과 유사합니다. 초기화 텍스트는 특정 구조체의 초기 값을 설정하는 데 유용합니다.

ResourceDictionary에 존재할 수 있도록 x:Key를 사용하여 구조체 값을 원하는 경우 초기화 텍스트와 함께 개체 요소 구문을 사용하는 경우가 많습니다. 여러 대상 속성 간에 해당 구조 값을 공유하는 경우 이 작업을 수행할 수 있습니다. 일부 구조체의 경우 특성 구문을 사용하여 구조체의 값을 설정할 수 없습니다. 초기화 텍스트는 유용하고 공유 가능한 CornerRadius, Thickness, GridLength 또는 Color 리소스를 생성하는 유일한 방법입니다.

이 약어 예제에서는 초기화 텍스트를 사용하여 두께 값을 지정합니다. 이 경우 왼쪽과 오른쪽을 모두 20으로 설정하고 위쪽아래쪽을 모두 10으로 설정하는 값을 지정합니다. 이 예제에서는 키 지정된 리소스로 만든 두께와 해당 리소스에 대한 참조를 보여줍니다. 두께 초기화 텍스트에 대한 자세한 내용은 두께를 참조하세요.

<UserControl ...>
  <UserControl.Resources>
    <Thickness x:Key="TwentyTenThickness">20,10</Thickness>
    ....
  </UserControl.Resources>
  ...
  <Grid Margin="{StaticResource TwentyTenThickness}">
  ...
  </Grid>
</UserControl ...>

일부 구조체는 개체 요소로 선언할 수 없습니다. 초기화 텍스트는 지원되지 않으며 리소스로 사용할 수 없습니다. XAML에서 이러한 값으로 속성을 설정하려면 특성 구문을 사용해야 합니다. 이러한 형식은 Duration, RepeatBehavior, Point, Rect Size입니다.

속성 설정

개체 요소 구문을 사용하여 선언한 개체에 대한 속성을 설정할 수 있습니다. WPF에서 다음과 같은 여러 가지 방법으로 XAML의 속성을 설정 할 수 있습니다.

  • 특성 구문을 사용합니다.
  • 속성 요소 구문을 사용합니다.
  • 콘텐츠(내부 텍스트 또는 자식 요소)가 개체의 XAML 콘텐츠 속성을 설정하는 요소 구문을 사용합니다.
  • 일반적으로 암시적 컬렉션 구문인 컬렉션 구문을 사용합니다.

개체 선언과 마찬가지로 이 목록이 각 기술로 속성을 설정할 수 있음을 의미하지는 않습니다. 일부 속성은 기술 중 하나만 지원합니다. 일부 속성은 둘 이상의 폼을 지원합니다. 예를 들어 속성 요소 구문 또는 특성 구문을 사용할 수 있는 속성이 있습니다. 가능한 것은 속성과 속성이 사용하는 개체 형식에 따라 달라집니다. Windows 런타임 API 참조에는 구문 섹션에서 사용할 수 있는 XAML 사용량이 표시됩니다. 때로는 작동하지만 더 자세한 것 대체 사용이있다. XAML에서 해당 속성을 사용하기 위한 모범 사례 또는 실제 시나리오를 보여 주려고 하기 때문에 이러한 자세한 사용법이 항상 표시되지는 않습니다. XAML 구문에 대한 지침은 XAML에서 설정할 수 있는 속성에 대한 참조 페이지의 XAML 사용 섹션 에 제공됩니다.

XAML에서는 어떠한 방법으로도 설정할 수 없고 코드를 사용해서만 설정할 수 있는 개체의 속성도 있습니다. 일반적으로 XAML이 아닌 코드 숨김에서 작업하는 데 더 적합한 속성입니다.

XAML에서는 읽기 전용 속성을 설정할 수 없습니다. 코드에서도 소유 형식은 생성자 오버로드, 도우미 메서드 또는 계산된 속성 지원과 같은 다른 방법으로 설정하도록 지원해야 합니다. 계산된 속성은 다른 설정 가능한 속성의 값과 기본 제공 처리가 포함된 이벤트에 의존합니다. 이러한 기능은 종속성 속성 시스템에서 사용할 수 있습니다. 종속성 속성이 계산 속성 지원에 어떻게 유용한지에 대한 자세한 내용은 종속성 속성 개요를 참조하세요.

XAML의 컬렉션 구문은 읽기 전용 속성을 설정하는 모양을 제공하지만 실제로는 그렇지 않습니다. 이 항목의 뒷부분에서 "컬렉션 구문"을 참조하세요.

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

특성 값 설정은 XML 또는 HTML과 같이 태그 언어로 속성 값을 설정하는 일반적인 수단입니다. XAML 특성 설정은 XML에서 특성 값을 설정하는 방법과 유사합니다. 특성 이름은 요소 이름 다음에 있는 태그 내의 모든 지점에서 지정되며 요소 이름과 하나 이상의 공백으로 구분됩니다. 특성 이름 뒤에 등호가 잇습니다. 특성 값은 따옴표 쌍 내에 포함됩니다. 따옴표는 값을 일치시키고 묶는 한 큰따옴표 또는 작은따옴표일 수 있습니다. 특성 값 자체는 문자열로 표현할 수 있어야 합니다. 문자열은 종종 숫자를 포함하지만 XAML에 대한 모든 특성 값은 XAML 파서가 관련되고 몇 가지 기본 값 변환을 수행할 때까지 문자열 값입니다.

이 예제에서는 네 개의 특성에 대한 특성 구문을 사용하여 Rectangle 개체의 Name, Width, Height Fill 속성을 설정합니다.

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

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

속성 요소 구문을 사용하여 개체의 많은 속성을 설정할 수 있습니다. 속성 요소는 다음과 같습니다: <object.property>.

속성 요소 구문을 사용하려면 설정하려는 속성에 대한 XAML 속성 요소를 만듭니다. 표준 XML에서 이 요소는 이름에 점이 있는 요소로 간주됩니다. 그러나 XAML에서 요소 이름의 점은 요소를 속성 요소로 식별합니다. 이때 property는 지원하는 개체 모델 구현에서 object의 멤버로 예상됩니다. 속성 요소 구문을 사용하려면 속성 요소 태그를 "채우기"위해 개체 요소를 지정할 수 있어야 합니다. 속성 요소에는 항상 일부 콘텐츠(단일 요소, 여러 요소 또는 내부 텍스트)가 있습니다. 자체 닫는 속성 요소가 있는 것은 아무 소용이 없습니다.

다음 문법 에서 속성 은 설정할 속성의 이름이고 propertyValueAsObjectElement 는 속성의 값 형식 요구 사항을 충족해야 하는 단일 개체 요소입니다.

<object>

<object.property>

propertyValueAsObjectElement

</object.property>

</object>

다음 예제에서는 속성 요소 구문을 사용하여 SolidColorBrush 개체 요소를 사용하여 Rectangle의 Fill설정합니다. (내 SolidColorBrush, Color는 특성으로 설정됩니다.) 이 XAML의 구문 분석 결과는 특성 구문을 사용하여 Fill을 설정한 이전 XAML 예제와 동일합니다.

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

XAML 어휘 및 개체 지향 프로그래밍

Windows 런타임 XAML 형식의 XAML 멤버로 표시되는 속성과 이벤트는 기본 형식에서 상속되는 경우가 많습니다. 다음 예제를 고려해 보세요<Button Background="Blue" .../>. Background 속성은 Button 클래스에서 즉시 선언된 속성이 아닙니다. 대신, Background는 기본 Control 클래스에서 상속됩니다. 실제로 Button에 대한 참조 항목을 살펴보면 멤버 목록에는 ButtonBase, Control, FrameworkElement, UIElement, DependencyObject 같은 연속 기본 클래스 체인의 각 체인에서 상속된 멤버가 하나 이상 포함되어 있음을 알 수 있습니다. 속성 목록에서 모든 읽기-쓰기 속성 및 컬렉션 속성은 XAML 어휘 의미로 상속됩니다. 이벤트(예: 다양한 UIElement 이벤트)도 상속됩니다.

XAML 지침에 Windows 런타임 참조를 사용하는 경우 구문이나 예제 코드에 표시되는 요소 이름은 기본 클래스에서 상속할 수 있는 모든 형식에서 해당 참조 토픽을 공유하므로 원래 속성을 정의하는 형식에 대한 이름도 있습니다. XML 편집기에서 Visual Studio의 XAML용 IntelliSense를 사용하는 경우 IntelliSense 및 해당 드롭다운은 상속을 병합하고 클래스 인스턴스에 대한 개체 요소로 시작한 후 설정에 사용할 수 있는 정확한 특성 목록을 제공하는 데 유용합니다.

XAML 콘텐츠 속성

일부 형식은 속성이 XAML 콘텐츠 구문을 사용하도록 설정하도록 해당 속성 중 하나를 정의합니다. 형식의 XAML 콘텐츠 속성의 경우 XAML에서 지정할 때 해당 속성의 속성 요소를 생략할 수 있습니다. 또는 소유 형식의 개체 요소 태그 내에서 해당 내부 텍스트를 직접 제공하여 속성을 내부 텍스트 값으로 설정할 수 있습니다. XAML 콘텐츠 속성은 해당 속성에 대한 간단한 태그 구문을 지원하고 중첩을 줄여 XAML을 더 사람이 읽을 수 있게 합니다.

XAML 콘텐츠 구문을 사용할 수 있는 경우 해당 구문은 해당 속성에 대한 구문"XAML" 섹션에 Windows 런타임 참조 설명서에 표시됩니다. 예를 들어 Border자식 속성 페이지에는 다음과 같이 Border의 단일 개체 Border.Child 값을 설정하는 속성 요소 구문 대신 XAML 콘텐츠 구문이 표시됩니다.

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

XAML 콘텐츠 속성으로 선언된 속성이 Object 형식이거나 String 형식인 경우 XAML 콘텐츠 구문은 XML 문서 모델의 기본적으로 내부 텍스트인 여는 개체 태그와 닫는 개체 태그 사이의 문자열을 지원합니다. 예를 들어 TextBlockText 속성 페이지에는 텍스트를 설정할 내부 텍스트 값이 있지만 태그에 "Text" 문자열이 표시되지 않는 XAML 콘텐츠 구문이 표시됩니다. 사용례는 다음과 같습니다.

<TextBlock>Hello!</TextBlock>

클래스에 대한 XAML 콘텐츠 속성이 있는 경우 클래스에 대한 참조 항목의 "특성" 섹션에 표시됩니다. ContentPropertyAttribute 속성 값이 인 리소스를 찾습니다. 이 특성은 명명된 필드 "Name"을 사용합니다. "Name" 값은 XAML 콘텐츠 속성인 해당 클래스의 속성 이름입니다. 예를 들어 테두리 참조 페이지에 ContentProperty("Name=Child")가 표시됩니다.

멘션 중요한 XAML 구문 규칙 중 하나는 요소에 설정한 XAML 콘텐츠 속성 및 기타 속성 요소를 혼합할 수 없다는 것입니다. XAML 콘텐츠 속성은 속성 요소 앞 또는 뒤에 완전히 설정해야 합니다. 예를 들어 다음은 잘못된 XAML입니다 .

<StackPanel>
  <Button>This example</Button>
  <StackPanel.Resources>
    <SolidColorBrush x:Key="BlueBrush" Color="Blue"/>
  </StackPanel.Resources>
  <Button>... is illegal XAML</Button>
</StackPanel>

컬렉션 구문

지금까지 표시된 모든 구문은 속성을 단일 개체로 설정하는 것입니다. 그러나 많은 UI 시나리오에서는 지정된 부모 요소에 여러 자식 요소가 있을 수 있어야 합니다. 예를 들어 입력 양식의 UI에는 여러 텍스트 상자 요소, 일부 레이블 및 "제출" 단추가 필요합니다. 그러나 프로그래밍 개체 모델을 사용하여 이러한 여러 요소에 액세스하는 경우 일반적으로 각 항목이 서로 다른 속성의 값이 아닌 단일 컬렉션 속성의 항목이 됩니다. XAML은 컬렉션 형식을 암시적으로 사용하는 속성을 처리하고 컬렉션 형식의 모든 자식 요소에 대해 특수 처리를 수행하여 일반적인 백업 컬렉션 모델을 지원할 뿐만 아니라 여러 자식 요소를 지원합니다.

많은 컬렉션 속성은 클래스의 XAML 콘텐츠 속성으로도 식별됩니다. 암시적 컬렉션 처리와 XAML 콘텐츠 구문의 조합은 패널, 뷰 또는 항목 컨트롤과 같은 컨트롤 작성에 사용되는 형식에서 자주 볼 수 있습니다. 예를 들어 다음 예제에서는 StackPanel 내에서 두 개의 피어 UI 요소를 합치기 위한 가장 간단한 XAML을 보여 줍니다.

<StackPanel>
  <TextBlock>Hello</TextBlock>
  <TextBlock>World</TextBlock>
</StackPanel>

XAML 컬렉션 구문의 메커니즘

처음에는 XAML이 읽기 전용 컬렉션 속성의 "집합"을 사용하도록 설정하는 것처럼 보일 수 있습니다. 실제로 XAML에서 사용할 수 있는 것은 기존 컬렉션에 항목을 추가하는 것입니다. XAML 지원을 구현하는 XAML 언어 및 XAML 프로세서는 컬렉션 형식을 지원하는 규칙을 사용하여 이 구문을 사용하도록 설정합니다. 일반적으로 컬렉션의 특정 항목을 참조하는 인덱서 또는 Items 속성과 같은 백업 속성이 있습니다. 일반적으로 이 속성은 XAML 구문에서 명시적이지 않습니다. 컬렉션의 경우 XAML 구문 분석의 기본 메커니즘은 속성이 아니라 메서드입니다. 특히 대부분의 경우 Add 메서드입니다. XAML 프로세서가 XAML 컬렉션 구문 내에서 하나 이상의 개체 요소를 발견하면 이러한 각 개체는 먼저 요소에서 만들어지고 컬렉션의 Add 메서드를 호출하여 포함하는 컬렉션에 각 새 개체가 추가됩니다.

XAML 파서가 컬렉션에 항목을 추가하는 경우 지정된 XAML 요소가 컬렉션 개체의 허용 항목 자식인지 여부를 결정하는 Add 메서드의 논리입니다. 많은 컬렉션 형식은 지원 구현에 의해 강력하게 형식화됩니다. 즉, Add입력 매개 변수는 전달되는 항목이 Add 매개 변수 형식과 일치하는 형식이어야 합니다.

컬렉션 속성의 경우 컬렉션을 개체 요소로 명시적으로 지정하려고 할 때 주의해야 합니다. XAML 파서는 개체 요소가 발견될 때마다 새 개체를 만듭니다. 사용하려는 컬렉션 속성이 읽기 전용인 경우 XAML 구문 분석 예외를 throw할 수 있습니다. 암시적 컬렉션 구문을 사용하면 해당 예외가 표시되지 않습니다.

특성 또는 속성 요소 구문을 사용하는 경우

XAML에서 설정되는 것을 지원하는 모든 속성은 직접 값 설정에 대한 특성 또는 속성 요소 구문을 지원하지만 잠재적으로 두 구문을 서로 교환하여 지원하지 않을 수 있습니다. 일부 속성은 구문을 지원하며 일부 속성은 XAML 콘텐츠 속성과 같은 추가 구문 옵션을 지원합니다. 속성에서 지원하는 XAML 구문의 형식은 속성이 속성 형식으로 사용하는 개체의 형식에 따라 달라집니다. 속성 형식이 double(float 또는 decimal), 정수, 부울 또는 문자열과 같은 기본 형식인 경우 속성은 항상 특성 구문을 지원합니다.

문자열을 처리하여 속성을 설정하는 데 사용하는 개체 형식을 만들 수 있는 경우 특성 구문을 사용하여 속성을 설정할 수도 있습니다. 기본 형식의 경우 항상 형식 변환이 파서에 기본 제공됩니다. 그러나 속성 요소 내의 개체 요소가 아니라 특성 값으로 지정된 문자열을 사용하여 특정 다른 개체 형식을 만들 수도 있습니다. 이렇게 하려면 해당 특정 속성에서 지원되거나 해당 속성 형식을 사용하는 모든 값에 대해 일반적으로 지원되는 기본 형식 변환이 있어야 합니다. 특성의 문자열 값은 새 개체 값의 초기화에 중요한 속성을 설정하는 데 사용됩니다. 잠재적으로 특정 형식 변환기는 문자열의 정보를 고유하게 처리하는 방법에 따라 공통 속성 형식의 다른 서브클래스를 만들 수도 있습니다. 이 동작을 지원하는 개체 형식에는 참조 설명서의 구문 섹션에 특수 문법이 나열됩니다. 예를 들어 Brush에 대한 XAML 구문은 특성 구문을 사용하여 Brush 형식의 모든 속성에 대한 새 SolidColorBrush 값을 만드는 방법을 보여 줍니다(그리고 Windows 런타임 XAML에는 많은 Brush 속성이 있습니다).

XAML 구문 분석 논리 및 규칙

XAML 파서가 이를 읽어야 하는 방법과 비슷한 방식으로 XAML을 읽는 것이 유익합니다. 즉, 선형 순서로 발생하는 문자열 토큰 집합입니다. XAML 파서는 XAML 작동 방식에 대한 정의의 일부인 규칙 집합에 따라 이러한 토큰을 해석해야 합니다.

특성 값 설정은 XML 또는 HTML과 같이 태그 언어로 속성 값을 설정하는 일반적인 수단입니다. 다음 구문 에서 objectName 은 인스턴스화하려는 개체이고, propertyName 은 해당 개체에 설정할 속성의 이름이며 , propertyValue 는 설정할 값입니다.

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

-or-

<objectName propertyName="propertyValue">

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

</objectName>

두 구문 중 하나를 사용하면 개체를 선언하고 해당 개체에 속성을 설정할 수 있습니다. 첫 번째 예제는 태그의 단일 요소이지만 XAML 프로세서가 이 태그를 구문 분석하는 방법과 관련하여 실제로 여기에 개별 단계가 있습니다.

먼저 개체 요소의 존재는 새 objectName 개체를 인스턴스화해야 임을 나타냅니다. 이러한 인스턴스가 있어야만 인스턴스 속성 propertyName이 해당 인스턴스에 대해 설정될 수 있습니다.

XAML의 또 다른 규칙은 요소의 특성을 순서대로 설정할 수 있어야 한다는 것입니다. 예를 들어 and <Rectangle Height="50" Width="100" /> 사이에는 <Rectangle Width="100" Height="50" />차이가 없습니다. 사용하는 순서는 스타일의 문제입니다.

XAML 디자이너는 XML 편집기 이외의 디자인 화면을 사용하는 경우 순서 지정 규칙을 승격하는 경우가 많지만 나중에 해당 XAML을 자유롭게 편집하여 특성을 다시 정렬하거나 새 특성을 도입할 수 있습니다.

연결된 속성

XAML은 연결된 속성이라고 하는 구문 요소를 추가하여 XML을 확장합니다. 속성 요소 구문과 마찬가지로 연결된 속성 구문에는 점이 포함되며 점이 XAML 구문 분석에 특별한 의미를 줍니다. 특히 점은 연결된 속성의 공급자 및 속성 이름을 구분합니다.

XAML에서는 AttachedPropertyProvider 구문을 사용하여 연결된 속성을 설정합니다.PropertyName 여기 XAML에서 연결된 속성 Canvas.Left를 설정하는 방법의 예는 다음과 같습니다.

<Canvas>
  <Button Canvas.Left="50">Hello</Button>
</Canvas>

백업 형식에서 해당 이름의 속성이 없는 요소에 연결된 속성을 설정할 수 있으며, 이러한 방식으로 전역 속성이나 xml:space 특성과 같은 다른 XML 네임스페이스에서 정의된 특성처럼 작동합니다.

Windows 런타임 XAML에는 이러한 시나리오를 지원하는 연결된 속성이 표시됩니다.

자세한 내용은 연결된 속성 개요를 참조하세요.

리터럴 "{" 값

여는 중괄호({)는 태그 확장 순서를 여는 것이므로 이스케이프 시퀀스를 사용하여 "{"로 시작하는 리터럴 문자열 값을 지정합니다. 이스케이프 시퀀스는 "{}"입니다. 예를 들어 하나의 여는 중괄호를 문자열 값으로 지정하려면 특성 값을 "{}{"로 지정합니다. 따옴표를 대신 사용하여(예: '로 구분된 특성 값 내의 "") "{" 값을 문자열로 제공할 수도 있습니다.

참고 "\}"는 따옴표가 붙은 특성 안에 있는 경우에도 작동합니다.  

열거형 값

Windows 런타임 API의 많은 속성은 열거형을 값으로 사용합니다. 멤버가 읽기/쓰기 속성인 경우 특성 값을 제공하여 이러한 속성을 설정할 수 있습니다. 상수 이름의 정규화되지 않은 이름을 사용하여 속성 값으로 사용할 열거형 값을 식별합니다. 예를 들어 다음은 XAML에서 UIElement.Visibility를 설정하는 방법입니다 <Button Visibility="Visible"/>. 여기서 문자열로 "Visible"는 표시 유형 열거형인 Visible의 명명된 상수에 직접 매핑됩니다.

  • 정규화된 양식을 사용하지 마세요. 이 양식은 작동하지 않습니다. 예를 들어 다음은 잘못된 XAML입니다 <Button Visibility="Visibility.Visible"/>.
  • 상수의 값을 사용하지 마세요. 즉, 열거형이 정의된 방식에 따라 명시적으로 또는 암시적으로 있는 열거형의 정수 값을 사용하지 마세요. 작동하는 것처럼 보일 수 있지만 일시적인 구현 세부 정보가 될 수 있는 항목에 의존하기 때문에 XAML 또는 코드에서 잘못된 방법입니다. 예를 들어 다음과 같이 사용하지 마세요<Button Visibility="1"/>.

참고 XAML을 사용하고 열거형을 사용하는 API에 대한 참조 항목에서 구문속성 값 섹션에서 열거형 형식에 대한 링크를 클릭합니다. 이 링크는 해당 열거형의 명명된 상수 검색할 수 있는 열거형 페이지로 연결됩니다.

열거형은 플래그가 지정될 수 있습니다. 즉, FlagsAttribute특성이 지정됩니다. 플래그가 지정된 열거형의 값 조합을 XAML 특성 값으로 지정해야 하는 경우 각 열거형 상수의 이름을 각 이름 사이에 쉼표(,)와 중간 공백 문자 없이 사용합니다. 플래그 지정 특성은 Windows 런타임 XAML 어휘에서 일반적이지 않지만, ManipulationModes는 XAML에서 플래그 지정 열거형 값을 설정하는 것이 지원되는 예입니다.

XAML의 인터페이스

드문 경우이지만 속성 형식이 인터페이스인 XAML 구문이 표시됩니다. XAML 형식 시스템에서 해당 인터페이스를 구현하는 형식은 구문 분석 시 값으로 허용됩니다. 값으로 사용할 수 있는 형식의 만든 인스턴스가 있어야 합니다. ButtonBase의 Command 및 CommandParameter 속성에 대한 XAML 구문에 형식으로 사용되는 인터페이스가 표시됩니다. 이러한 속성은 ICommand 인터페이스가 뷰와 모델이 상호 작용하는 방식에 대한 계약인 MVVM(Model-View-ViewModel) 디자인 패턴을 지원합니다.

Windows 런타임 참조의 XAML 자리 표시자 규칙

XAML을 사용할 수 있는 Windows 런타임 API에 대한 참조 항목의 구문 섹션을 검토한 경우 구문에 자리 표시자가 꽤 많이 포함되어 있는 것을 볼 수 있습니다. XAML 구문은 사용 구문이므로 XAML 구문은 C#, Microsoft Visual Basic 또는 Visual C++ 구성 요소 확장(C++/CX) 구문과 다릅니다. 이는 사용자 고유의 XAML 파일에서 최종 사용을 암시하지만 사용할 수 있는 값에 대해 지나치게 규범적이지는 않습니다. 따라서 일반적으로 이 사용법은 리터럴과 자리 표시자를 혼합하는 문법 유형을 설명하고 XAML 값 섹션에서 일부 자리 표시자를 정의합니다.

속성의 XAML 구문에 형식 이름/요소 이름이 표시되면 표시된 이름은 원래 속성을 정의하는 형식에 대한 이름입니다. 그러나 Windows 런타임 XAML은 DependencyObject 기반 클래스에 대한 클래스 상속 모델을 지원합니다. 따라서 문자 그대로 정의 클래스가 아니라 속성/특성을 처음 정의한 클래스에서 파생되는 클래스에서 특성을 사용할 수 있습니다. 예를 들어 심층 상속을 사용하여 UIElement 파생 클래스에서 Visibility를 특성으로 설정할 수 있습니다. 예: <Button Visibility="Visible" /> 따라서 XAML 사용 구문에 표시된 요소 이름을 너무 문자 그대로 사용하지 마세요. 구문은 해당 클래스를 나타내는 요소와 파생 클래스를 나타내는 요소에도 사용할 수 있습니다. 정의 요소로 표시된 형식이 실제 사용량에 있는 것이 드물거나 불가능한 경우 해당 형식 이름은 의도적으로 구문에서 소문자로 지정됩니다. 예를 들어 UIElement.Visibility에 대해 표시되는 구문은 다음과 같습니다.

<uiElement Visibility="Visible"/>
-or-
<uiElement Visibility="Collapsed"/>

많은 XAML 구문 섹션에는 구문 섹션 바로 아래에 있는 XAML 값 섹션에서 정의되는 "사용량"에 자리 표시자가 포함됩니다.

XAML 사용 섹션에서는 다양한 일반화된 자리 표시자도 사용합니다. 이러한 자리 표시자는 XAML 값에서 매번 다시 정의되지 않습니다. 이러한 개체 틀이 무엇을 나타내는지 추측하거나 결국 학습하기 때문입니다. 대부분의 독자는 XAML 값에서 보는 것에 지쳐서 정의에서 제외할 수 있다고 생각합니다. 참고로, 다음은 이러한 자리 표시자 중 일부와 일반적인 의미의 목록입니다.

  • object: 이론적으로는 모든 개체 값이지만 문자열 또는 개체 선택과 같은 특정 유형의 개체로 실질적으로 제한되는 경우가 많으며 자세한 내용은 참조 페이지의 설명에 검사 합니다.
  • object 속성: 개체 속성 은 표시되는 구문이 많은 속성의 특성 값으로 사용할 수 있는 형식의 구문인 경우에 사용됩니다. 예를 들어 Brush표시된 Xaml 특성 사용량에는 object property="predefinedColorName"/이 포함됩니다. <>
  • eventhandler: 이벤트 특성에 대해 표시된 모든 XAML 구문에 대한 특성 값으로 나타납니다. 여기서 제공하는 것은 이벤트 처리기 함수의 함수 이름입니다. 해당 함수는 XAML 페이지의 코드 숨김에서 정의해야 합니다. 프로그래밍 수준에서 해당 함수는 처리 중인 이벤트의 대리자 서명과 일치해야 합니다. 그렇지 않으면 앱 코드가 컴파일되지 않습니다. 하지만 이는 XAML 고려 사항이 아니라 프로그래밍 고려 사항이므로 XAML 구문의 대리자 형식에 대해 힌트를 주지 않습니다. 이벤트에 대해 구현해야 하는 대리자를 알고 싶다면 대리자라는 레이블지정된 테이블 행에 있는 이벤트에 대한 참조 항목의 이벤트 정보 섹션에 있습니다.
  • enumMemberName: 모든 열거형의 특성 구문에 표시됩니다. 열거형 값을 사용하는 속성에 대해 비슷한 자리 표시자가 있지만 일반적으로 열거형 이름의 힌트를 사용하여 자리 표시자를 접두사로 지정합니다. 예를 들어 FrameworkElement.FlowDirection에 대해 표시된 구문은 <frameworkElementFlowDirection="flowDirectionMemberName"/>입니다. 이러한 속성 참조 페이지 중 하나에 있는 경우 텍스트 형식 옆에 있는 속성 값 섹션에 나타나는 열거형 형식에 대한 링크를 클릭합니다. 해당 열거형을 사용하는 속성의 특성 값에 대해 멤버 목록의 멤버 열에 나열된 문자열을 사용할 수 있습니다.
  • double, int, string, bool: XAML 언어로 알려진 기본 형식입니다. C# 또는 Visual Basic을 사용하여 프로그래밍하는 경우 이러한 형식은 Double, Int32, String Boolean과 같은 Microsoft .NET 동등한 형식으로 프로젝팅되며 .NET 코드 숨김에서 XAML 정의 값을 사용할 때 해당 .NET 형식의 멤버를 사용할 수 있습니다. C++/CX를 사용하여 프로그래밍하는 경우 C++ 기본 형식을 사용하지만 플랫폼 네임스페이스에서 정의한 형식(예:Platform::String)에 해당하는 형식을 고려할 수도 있습니다. 특정 속성에 대한 추가 값 제한이 있는 경우도 있습니다. 그러나 이러한 제한 사항은 코드 사용 및 XAML 사용 모두에 적용되므로 일반적으로 XAML 섹션이 아닌 속성 값 섹션 또는 주의 섹션에 언급된 내용이 표시됩니다.

팁 및 트릭, 스타일에 대한 노트

  • 태그 확장은 일반적으로 기본 XAML 개요에 설명되어 있습니다. 그러나 이 항목에 제공된 지침에 가장 큰 영향을 주는 태그 확장은 StaticResource 태그 확장(및 관련 ThemeResource)입니다. StaticResource 태그 확장의 함수는 XAML을 XAML ResourceDictionary에서 제공되는 재사용 가능한 리소스로 팩터링할 수 있도록 하는 것입니다. ResourceDictionary에서 컨트롤 템플릿 및 관련 스타일을 거의 항상 정의합니다. ResourceDictionary에서 컨트롤 템플릿 정의 또는 앱별 스타일의 더 작은 부분을 정의하는 경우가 많습니다. 예를 들어 앱이 UI의 다른 부분에 대해 두 번 이상 사용하는 색에 대한 SolidColorBrush입니다. StaticResource를 사용하면 설정해야 하는 속성 요소 사용이 필요한 모든 속성을 이제 특성 구문으로 설정할 수 있습니다. 그러나 재사용을 위해 XAML을 인덱싱하면 페이지 수준 구문을 단순화하는 것 이상의 이점이 있습니다. 자세한 내용은 ResourceDictionary 및 XAML 리소스 참조를 확인하세요.
  • XAML 예제에서 공백 및 줄 바꿈을 적용하는 방법에 대한 여러 가지 규칙이 표시됩니다. 특히 여러 특성이 설정된 개체 요소를 분리하는 방법에 대한 다양한 규칙이 있습니다. 그것은 단지 스타일의 문제입니다. Visual Studio XML 편집기에서는 XAML을 편집할 때 몇 가지 기본 스타일 규칙을 적용하지만 설정에서 변경할 수 있습니다. XAML 파일의 공백이 중요한 것으로 간주되는 경우가 적습니다. 자세한 내용은 XAML 및 공백을 참조 하세요.