태그 확장명 및 WPF XAMLMarkup Extensions and WPF XAML

이 항목에서는 XAML 태그 확장의 구문 규칙, 용도, 기반이 되는 클래스 개체 모델 등을 비롯한 개념에 대해 소개합니다.This topic introduces the concept of markup extensions for XAML, including their syntax rules, purpose, and the class object model that underlies them. 태그 확장은 XAML 언어의 일반적 기능이며 XAML 서비스에 대한 .NET 구현의 일반적 기능입니다.Markup extensions are a general feature of the XAML language and of the .NET implementation of XAML services. 이 항목에서는 WPF XAML에서 사용할 태그 확장에 대해 자세히 설명합니다.This topic specifically details markup extensions for use in WPF XAML.

XAML 프로세서 및 태그 확장XAML Processors and Markup Extensions

일반적으로 XAML 파서는 특성 값을 기본 형식으로 변환 가능한 리터럴 문자열로 해석하거나 특정 방법에 따라 개체로 변환할 수 있습니다.Generally speaking, a XAML parser can either interpret an attribute value as a literal string that can be converted to a primitive, or convert it to an object by some means. 이러한 방법 중 하나는 형식 변환기를 참조하는 것이며, 이에 대한 설명은 TypeConverter 및 XAML 항목에 나와 있습니다.One such means is by referencing a type converter; this is documented in the topic TypeConverters and XAML. 하지만 이와 다른 동작이 필요한 경우도 있습니다.However, there are scenarios where different behavior is required. 예를 들어 특성 값 때문에 개체 그래프에 새 개체가 나타나지 않도록 XAML 프로세서에 지시할 수 있습니다.For example, a XAML processor can be instructed that a value of an attribute should not result in a new object in the object graph. 이 경우 해당 특성은 개체 그래프의 다른 부분에 있는 이미 생성된 개체 또는 정적 개체에 대한 참조를 만드는 개체 그래프가 나타나게 해야 합니다.Instead, the attribute should result in an object graph that makes a reference to an already constructed object in another part of the graph, or a static object. 또 다른 시나리오로 기본값이 아닌 인수를 개체 생성자에 제공하는 구문을 사용하도록 XAML 프로세서에 지시할 수도 있습니다.Another scenario is that a XAML processor can be instructed to use a syntax that provides non-default arguments to the constructor of an object. 이러한 시나리오 유형의 경우 태그 확장을 통해 해결책을 찾을 수 있습니다.These are the types of scenarios where a markup extension can provide the solution.

기본 태그 확장 구문Basic Markup Extension Syntax

태그 확장은 특성에서 사용되는 속성, 속성 요소에서 사용되는 속성 또는 두 속성 모두의 값을 제공하도록 구현할 수 있습니다.A markup extension can be implemented to provide values for properties in an attribute usage, properties in a property element usage, or both.

특성 값을 제공하는 데 사용되는 경우 XAML 프로세서는 구문에서 여는 중괄호와 닫는 중괄호({ 및 })를 통해 태그 확장 시퀀스를 구분합니다.When used to provide an attribute value, the syntax that distinguishes a markup extension sequence to a XAML processor is the presence of the opening and closing curly braces ({ and }). 태그 확장 형식은 여는 중괄호 바로 다음에 오는 문자열 토큰으로 식별됩니다.The type of markup extension is then identified by the string token immediately following the opening curly brace.

속성 요소 구문에 사용되는 경우 태그 확장은 속성 요소 값을 제공하는 데 사용되는 다른 요소와 시각적으로 동일합니다. 즉, 태그 확장 클래스를 요소로 참조하는 XAML 요소 선언을 꺾쇠 괄호(<>)로 묶습니다.When used in property element syntax, a markup extension is visually the same as any other element used to provide a property element value: a XAML element declaration that references the markup extension class as an element, enclosed within angle brackets (<>).

XAML 정의 태그 확장명XAML-Defined Markup Extensions

XAML의 WPF 구현과 관련되지 않고 대신 XAML의 내장 형식 또는 기능 구현에서 언어로 사용되는 몇 가지 태그 확장도 있습니다.Several markup extensions exist that are not specific to the WPF implementation of XAML, but are instead implementations of intrinsics or features of XAML as a language. 이러한 태그 확장은 System.Xaml 어셈블리에 일반적인 .NET Framework XAML 서비스의 일부로 구현되어 있으며, XAML 언어 XAML 네임스페이스 내에 있습니다.These markup extensions are implemented in the System.Xaml assembly as part of the general .NET Framework XAML services, and are within the XAML language XAML namespace. 일반적인 태그 사용법에서 볼 수 있는 것처럼 이러한 태그 확장은 대개 사용법에서 x: 접두사로 식별됩니다.In terms of common markup usage, these markup extensions are typically identifiable by the x: prefix in the usage. MarkupExtension기본 클래스 (system.xaml에도 정의 됨)는 WPF xaml을 비롯 하 여 xaml 판독기와 xaml 작성기에서 지원 되기 위해 모든 태그 확장에서 사용 해야 하는 패턴을 제공 합니다.The MarkupExtension base class (also defined in System.Xaml) provides the pattern that all markup extensions should use in order to be supported in XAML readers and XAML writers, including in WPF XAML.

  • x:Type 은 명명된 형식에 Type 개체를 제공합니다.x:Type supplies the Type object for the named type. 이 기능은 스타일 및 템플릿에서 가장 많이 사용됩니다.This facility is used most frequently in styles and templates. 자세한 내용은 x:Type 태그 확장을 참조하세요.For details, see x:Type Markup Extension.

  • x:Static은 정적 값을 생성합니다.x:Static produces static values. 값은 직접적으로 대상 속성 값의 형식이 아니라 해당 형식으로 계산될 수 있는 값-형식 코드 엔터티에서 생성됩니다.The values come from value-type code entities that are not directly the type of a target property's value, but can be evaluated to that type. 자세한 내용은 x:Static 태그 확장을 참조하세요.For details, see x:Static Markup Extension.

  • x:Null은 속성 값으로 null을 지정하며 특성 또는 속성 요소 값에 사용될 수 있습니다.x:Null specifies null as a value for a property and can be used either for attributes or property element values. 자세한 내용은 x:Null 태그 확장을 참조하세요.For details, see x:Null Markup Extension.

  • x:Array는 WPF 기본 요소 및 컨트롤 모델에서 제공하는 컬렉션 지원이 의도적으로 사용되지 않는 경우 XAML 구문에서 일반적인 배열 만들기를 지원합니다.x:Array provides support for creation of general arrays in XAML syntax, for cases where the collection support provided by WPF base elements and control models is deliberately not used. 자세한 내용은 x:Array 태그 확장을 참조하세요.For details, see x:Array Markup Extension.

참고

x: 접두사는 XAML 파일 또는 프로덕션의 루트 요소에서 XAML 언어 내장 형식의 일반적인 XAML 네임스페이스 매핑에 사용됩니다.The x: prefix is used for the typical XAML namespace mapping of the XAML language intrinsics, in the root element of a XAML file or production. 예를 들어, WPF 응용 프로그램에 대 한 Visual Studio 템플릿은이 매핑을 사용 하 여 XAML 파일을 시작 합니다 x: .For example, the Visual Studio templates for WPF applications initiate a XAML file using this x: mapping. 사용자 고유의 XAML 네임스페이스 매핑에서 다른 접두사 토큰을 선택할 수 있지만 이 설명서에서는 특정 프레임워크와 관련되지 않은 WPF 기본 네임스페이스나 다른 XAML 네임스페이스와 달리 XAML 언어의 XAML 네임스페이스에서 정의된 부분인 해당 엔터티를 식별하는 방법으로 기본 x: 매핑을 가정합니다.You could choose a different prefix token in your own XAML namespace mapping, but this documentation will assume the default x: mapping as a means of identifying those entities that are a defined part of the XAML namespace for the XAML language, as opposed to the WPF default namespace or other XAML namespaces not related to a specific framework.

WPF 관련 태그 확장WPF-Specific Markup Extensions

WPF 프로그래밍에서 사용되는 가장 일반적인 태그 확장은 리소스 참조(StaticResourceDynamicResource)를 지원하는 태그 확장과 데이터 바인딩(Binding)을 지원하는 태그 확장입니다.The most common markup extensions used in WPF programming are those that support resource references (StaticResource and DynamicResource), and those that support data binding (Binding).

  • StaticResource는 이미 정의된 리소스의 값을 대체하여 속성에 대한 값을 제공합니다.StaticResource provides a value for a property by substituting the value of an already defined resource. StaticResource 평가는 궁극적으로 XAML 로드 시간에 수행되고 런타임에는 개체 그래프에 액세스하지 못합니다.A StaticResource evaluation is ultimately made at XAML load time and does not have access to the object graph at run time. 자세한 내용은 StaticResource 태그 확장을 참조하세요.For details, see StaticResource Markup Extension.

  • DynamicResource는 값이 리소스에 대한 런타임 참조가 되도록 지연하여 속성 값을 제공합니다.DynamicResource provides a value for a property by deferring that value to be a run-time reference to a resource. 동적 리소스 참조는 리소스가 액세스될 때마다 새로 조회하도록 하고 런타임에 개체 그래프에 액세스합니다.A dynamic resource reference forces a new lookup each time that such a resource is accessed and has access to the object graph at run time. 이 액세스를 얻기 위해 WPF 속성 시스템의 종속성 속성 및 계산된 식에 의해 DynamicResource 개념이 지원됩니다.In order to get this access, DynamicResource concept is supported by dependency properties in the WPF property system, and evaluated expressions. 따라서 종속성 속성 대상에는 DynamicResource만 사용할 수 있습니다.Therefore you can only use DynamicResource for a dependency property target. 자세한 내용은 DynamicResource 태그 확장을 참조하세요.For details, see DynamicResource Markup Extension.

  • Binding은 런타임에 부모 개체에 적용되는 데이터 컨텍스트를 사용하여 속성에 대한 데이터 바인딩된 값을 제공합니다.Binding provides a data bound value for a property, using the data context that applies to the parent object at run time. 이 태그 확장은 데이터 바인딩을 지정하는 인라인 구문을 사용하기 때문에 비교적 복잡합니다.This markup extension is relatively complex, because it enables a substantial inline syntax for specifying a data binding. 자세한 내용은 Binding 태그 확장을 참조하세요.For details, see Binding Markup Extension.

  • RelativeSourceBinding런타임 개체 트리에서 가능한 여러 관계를 탐색할 수 있는에 대 한 소스 정보를 제공 합니다.RelativeSource provides source information for a Binding that can navigate several possible relationships in the run-time object tree. 즉, 주변 개체 트리에 대한 완전한 지식 없이 코드에 생성되거나 다용도 템플릿에 생성되는 바인딩에 대한 특수한 소스를 제공합니다.This provides specialized sourcing for bindings that are created in multi-use templates or created in code without full knowledge of the surrounding object tree. 자세한 내용은 RelativeSource 태그 확장을 참조하세요.For details, see RelativeSource MarkupExtension.

  • TemplateBinding을 사용하면 컨트롤 템플릿에서 템플릿을 사용할 클래스의 개체-모델 정의 속성에서 가져온 템플릿 기반 속성 값을 사용할 수 있습니다.TemplateBinding enables a control template to use values for templated properties that come from object-model-defined properties of the class that will use the template. 즉, 템플릿 정의 내의 속성은 템플릿이 적용된 후의 컨텍스트에만 액세스할 수 있습니다.In other words, the property within the template definition can access a context that only exists once the template is applied. 자세한 내용은 TemplateBinding 태그 확장을 참조하세요.For details, see TemplateBinding Markup Extension. TemplateBinding의 실질적인 사용 방법에 대한 자세한 내용은 Styling with ControlTemplates Sample(ControlTemplate으로 스타일 지정 샘플)을 참조하세요.For more information on the practical use of TemplateBinding, see Styling with ControlTemplates Sample.

  • ColorConvertedBitmap에서는 비교적 고급 이미징 시나리오를 지원합니다.ColorConvertedBitmap supports a relatively advanced imaging scenario. 자세한 내용은 ColorConvertedBitmap 태그 확장을 참조하세요.For details, see ColorConvertedBitmap Markup Extension.

  • ComponentResourceKeyThemeDictionary는 리소스 조회, 특히 사용자 지정 컨트롤과 함께 패키지된 리소스 및 테마를 지원합니다.ComponentResourceKey and ThemeDictionary support aspects of resource lookup, particularly for resources and themes that are packaged with custom controls. 자세한 내용은 ComponentResourceKey 태그 확장, ThemeDictionary 태그 확장 또는 컨트롤 제작 개요를 참조하세요.For more information, see ComponentResourceKey Markup Extension, ThemeDictionary Markup Extension, or Control Authoring Overview.

*확장 클래스*Extension Classes

일반 XAML 언어 및 WPF 관련 태그 확장의 경우 각 태그 확장의 동작은에서 파생 되는 클래스를 통해 XAML 프로세서로 식별 *Extension MarkupExtension 되며 메서드의 구현을 제공 합니다 ProvideValue .For both the general XAML language and WPF-specific markup extensions, the behavior of each markup extension is identified to a XAML processor through a *Extension class that derives from MarkupExtension, and provides an implementation of the ProvideValue method. 각 확장에서 이 메서드는 태그 확장이 평가될 때 반환되는 개체를 제공합니다.This method on each extension provides the object that is returned when the markup extension is evaluated. 반환되는 개체는 대개 태그 확장에 전달된 다양한 문자열 토큰을 기반으로 평가됩니다.The returned object is typically evaluated based on the various string tokens that are passed to the markup extension.

예를 들어, StaticResourceExtension 클래스는 구현에서 요청 된 개체를 반환 하 고 ProvideValue , 해당 구현을 통해 리소스를 조회 하는 데 사용 되는 문자열이 되도록 실제 리소스 조회의 표면 구현을 제공 합니다 x:Key .For example, the StaticResourceExtension class provides the surface implementation of actual resource lookup so that its ProvideValue implementation returns the object that is requested, with the input of that particular implementation being a string that is used to look up the resource by its x:Key. 기존 태그 확장을 사용할 때에는 이러한 구현 세부 사항이 중요하지 않습니다.Much of this implementation detail is unimportant if you are using an existing markup extension.

일부 태그 확장에는 문자열 토큰 인수가 사용되지 않습니다.Some markup extensions do not use string token arguments. 이는 태그 확장이 정적 값 또는 일정한 값을 반환하기 때문이거나, 반환해야 하는 값의 컨텍스트가 serviceProvider 매개 변수로 전달된 서비스 중 하나를 통해 사용 가능하기 때문입니다.This is either because they return a static or consistent value, or because context for what value should be returned is available through one of the services passed through the serviceProvider parameter.

*Extension 이름 지정 패턴은 편의성과 일관성을 고려한 것입니다.The *Extension naming pattern is for convenience and consistency. XAML 프로세서가 해당 클래스를 태그 확장에 대한 지원으로 식별하는 데 필요한 것은 아닙니다.It is not necessary in order for a XAML processor to identify that class as support for a markup extension. 코드 베이스가 system.xml을 포함 하 고 .NET Framework XAML 서비스 구현을 사용 하기만 한다면 XAML 태그 확장으로 인식 되어야 하는 모든는 및에서 파생 되 MarkupExtension 고 생성 구문을 지 원하는 데 사용 됩니다.So long as your codebase includes System.Xaml and uses .NET Framework XAML Services implementations, all that is necessary to be recognized as a XAML markup extension is to derive from MarkupExtension and to support a construction syntax. WPF는 명명 패턴을 따르지 않는 태그 확장 가능 클래스 *Extension 를 정의 합니다 (예:) Binding .WPF defines markup extension-enabling classes that do not follow the *Extension naming pattern, for example Binding. 이와 같은 일반적인 이유는 클래스 지원 시나리오가 순수한 태그 확장 지원의 범위를 벗어나기 때문입니다.Typically the reason for this is that the class supports scenarios beyond pure markup extension support. 의 경우 Binding 이 클래스는 XAML을 사용 하 여 수행할 작업이 없는 시나리오에 대 한 개체의 메서드 및 속성에 대 한 런타임 액세스를 지원 합니다.In the case of Binding, that class supports run-time access to methods and properties of the object for scenarios that have nothing to do with XAML.

초기화 텍스트의 확장 클래스 해석Extension Class Interpretation of Initialization Text

XAML 프로세서는 중괄호 안에서 태그 확장 이름 다음에 나오는 문자열 토큰을 다음 방법 중 하나로 해석합니다.The string tokens following the markup extension name and still within the braces are interpreted by a XAML processor in one of the following ways:

  • 쉼표는 항상 개별 토큰의 분리 기호나 구분 기호를 나타냅니다.A comma always represents the separator or delimiter of individual tokens.

  • 구분된 개별 토큰에 등호가 포함되지 않은 경우 각 토큰은 생성자 인수로 처리됩니다.If the individual separated tokens do not contain any equals signs, each token is treated as a constructor argument. 각 생성자 매개 변수는 해당 시그니처에 필요한 형식과 순서로 지정되어야 합니다.Each constructor parameter must be given as the type expected by that signature, and in the proper order expected by that signature.

    참고

    XAML 프로세서는 여러 쌍 중 인수 수가 일치하는 생성자를 호출해야 합니다.A XAML processor must call the constructor that matches the argument count of the number of pairs. 이러한 이유로 사용자 지정 태그 확장을 구현 하는 경우 동일한 인수 개수로 여러 생성자를 제공 하지 마십시오.For this reason, if you are implementing a custom markup extension, do not provide multiple constructors with the same argument count. 매개 변수 수가 동일한 태그 확장 생성자 경로가 둘 이상 있을 때의 XAML 프로세서 동작은 정의되어 있지 않지만, 태그 확장 형식 정의에 이 상황이 있는 경우 XAML 프로세서에서 사용에 대한 예외를 throw할 수 있다고 예상해야 합니다.The behavior for how a XAML processor behaves if more than one markup extension constructor path with the same parameter count exists is not defined, but you should anticipate that a XAML processor is permitted to throw an exception on usage if this situation exists in the markup extension type definitions.

  • 구분 된 개별 토큰에 등호가 포함 된 경우 XAML 프로세서는 먼저 태그 확장에 대해 매개 변수가 없는 생성자를 호출 합니다.If the individual separated tokens contain equals signs, then a XAML processor first calls the parameterless constructor for the markup extension. 그런 다음 각 이름=값 쌍이 태그 확장에 존재하는 속성 이름과 해당 속성에 할당할 값으로 해석됩니다.Then, each name=value pair is interpreted as a property name that exists on the markup extension, and a value to assign to that property.

  • 태그 확장에서 생성자 동작과 속성 설정 동작이 동일한 경우에는 어떤 동작을 사용해도 관계가 없습니다.If there is a parallel result between the constructor behavior and the property setting behavior in a markup extension, it does not matter which behavior you use. = 하나 이상의 설정 가능한 속성이 있는 태그 확장에 대 한 속성 쌍을 사용 하는 것이 더 일반적입니다 .이 경우에는 태그를 보다 고의로 사용 하 고 생성자 매개 변수를 실수로 바꿀 가능성이 거의 없습니다.It is more common usage to use the property=value pairs for markup extensions that have more than one settable property, if only because it makes your markup more intentional and you are less likely to accidentally transpose constructor parameters. 속성 = 값 쌍을 지정 하는 경우 해당 속성은 순서에 관계 없이 지정할 수 있습니다. 또한 태그 확장이 설정 가능한 속성 중 하나를 설정 하는 생성자 매개 변수를 제공 한다는 보장이 없습니다.(When you specify property=value pairs, those properties may be in any order.) Also, there is no guarantee that a markup extension supplies a constructor parameter that sets every one of its settable properties. 예를 들어 Binding속성 값 형식으로 확장을 통해 설정할 수 있는 많은 속성이 있는 태그 확장 = 이지만, Binding 매개 변수가 없는 생성자와 초기 경로를 설정 하는 생성자 두 개를 지원 합니다.For example, Binding is a markup extension, with many properties that are settable through the extension in property=value form, but Binding only supports two constructors: a parameterless constructor, and one that sets an initial path.

  • 리터럴 쉼표는 이스케이프 없이 태그 확장에 전달할 수 없습니다.A literal comma cannot be passed to a markup extension without escapement.

이스케이프 시퀀스 및 태그 확장Escape Sequences and Markup Extensions

XAML 프로세서의 특성 처리에서는 중괄호를 태그 확장 시퀀스의 표시기로 사용합니다.Attribute handling in a XAML processor uses the curly braces as indicators of a markup extension sequence. 또한 필요한 경우에는 리터럴 중괄호 다음에 비어 있는 중괄호 쌍을 사용하여 이스케이프 시퀀스를 입력함으로써 리터럴 중괄호 문자 특성 값을 생성할 수 있습니다.It is also possible to produce a literal curly brace character attribute value if necessary, by entering an escape sequence using an empty curly brace pair followed by the literal curly brace. {} 이스케이프 시퀀스 태그 확장명을 참조 하세요.See {} Escape Sequence - Markup Extension.

XAML에서 중첩 태그 확장 사용법Nesting Markup Extensions in XAML Usage

여러 태그 확장을 중첩할 수 있으며 각 태그 확장은 가장 깊은 수준부터 평가됩니다.Nesting of multiple markup extensions is supported, and each markup extension will be evaluated deepest first. 예를 들어 다음 사용법을 가정해 봅니다.For example, consider the following usage:

<Setter Property="Background"  
  Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />  

이 사용법에서 x:Static 문이 먼저 평가되고 문자열이 반환됩니다.In this usage, the x:Static statement is evaluated first and returns a string. 그런 다음 해당 문자열은 DynamicResource의 인수로 사용됩니다.That string is then used as the argument for DynamicResource.

태그 확장 및 속성 요소 구문Markup Extensions and Property Element Syntax

속성 요소 값을 채우는 개체 요소로 사용된 경우에는 태그 확장 클래스를 XAML에서 사용할 수 있는 일반적인 형식 기반 개체 요소와 시각적으로 구분할 수 없습니다.When used as an object element that fills a property element value, a markup extension class is visually indistinguishable from a typical type-backed object element that can be used in XAML. 이 경우 일반적인 개체 요소와 태그 확장 간의 실질적인 차이는 태그 확장이 형식화된 값으로 계산되거나 식으로 지연된다는 점입니다.The practical difference between a typical object element and a markup extension is that the markup extension is either evaluated to a typed value or deferred as an expression. 따라서 다른 프로그래밍 모델에서 런타임에 바인딩되는 속성이 처리되는 방식과 마찬가지로 태그 확장의 속성 값에서 발생할 수 있는 형식 오류에 대한 메커니즘이 달라집니다.Therefore the mechanisms for any possible type errors of property values for the markup extension will be different, similar to how a late-bound property is treated in other programming models. 일반적인 개체 요소는 XAML이 구문 분석될 때 해당 요소가 설정하고 있는 대상 속성을 기준으로 형식 일치 여부가 평가됩니다.An ordinary object element will be evaluated for type match against the target property it is setting when the XAML is parsed.

속성 요소를 채우는 개체 요소 구문에 사용되는 대부분의 태그 확장에는 콘텐츠나 추가 속성 요소 구문이 없습니다.Most markup extensions, when used in object element syntax to fill a property element, would not have content or any further property element syntax within. 따라서 개체 요소 태그를 닫고 자식 요소를 제공하지 않을 수 있습니다.Thus you would close the object element tag, and provide no child elements. XAML 프로세서에서 개체 요소를 발견할 때마다 해당 클래스의 생성자가 호출되어 구문 분석된 요소에서 생성되는 개체를 인스턴스화합니다.Whenever any object element is encountered by a XAML processor, the constructor for that class is called, which instantiates the object created from the parsed element. 태그 확장 클래스는 다릅니다. 개체 요소 구문에서 태그 확장을 사용할 수 있도록 하려면 매개 변수가 없는 생성자를 제공 해야 합니다.A markup extension class is no different: if you want your markup extension to be usable in object element syntax, you must provide a parameterless constructor. 일부 기존 태그 확장에는 효율적인 초기화를 위해 지정해야 하는 필수 속성 값이 적어도 하나는 있습니다.Some existing markup extensions have at least one required property value that must be specified for effective initialization. 이런 경우 해당 속성 값은 대개 개체 요소에 속성 특성으로 지정됩니다.If so, that property value is typically given as a property attribute on the object element. XAML 네임스페이스(x:) 언어 기능WPF XAML 확장 참조 페이지에는 필수 속성이 있는 태그 확장 및 필수 속성의 이름이 나와 있습니다.In the XAML Namespace (x:) Language Features and WPF XAML Extensions reference pages, markup extensions that have required properties (and the names of required properties) will be noted. 또한 참조 페이지에는 특정 태그 확장에서 개체 요소 구문이나 특성 구문을 사용할 수 없는지 여부도 나와 있습니다.Reference pages will also note if either object element syntax or attribute syntax is disallowed for particular markup extensions. 예를 들어 x:Array 태그 확장의 경우에는 배열의 내용을 태그에서 콘텐츠로 지정해야 하기 때문에 특성 구문을 사용할 수 없습니다.A notable case is x:Array Markup Extension, which cannot support attribute syntax because the contents of that array must be specified within the tagging as content. 배열 내용은 일반 개체로 처리되므로 특성에 대한 기본 형식 변환기를 사용할 수 없습니다.The array contents are handled as general objects, therefore no default type converter for the attribute is feasible. x:Array 태그 확장에는 type 매개 변수도 필요합니다.Also, x:Array Markup Extension requires a type parameter.

참고 항목See also