요약 10 장입니다.Summary of Chapter 10. XAML 태그 확장XAML markup extensions

샘플 다운로드 샘플 다운로드Download Sample Download the sample

XAML 파서는 특성 값으로 설정 되어 기본.NET 데이터 형식에 대 한 표준 변환에 따라 속성의 형식 문자열을 변환 하는 일반적으로 또는 TypeConverter 속성 또는 해당 형식과 연결 된 파생 클래스는 TypeConverterAttribute.Normally, the XAML parser converts any string set as an attribute value to the type of the property based on standard conversions for the basic .NET data types, or a TypeConverter derivative attached to the property or its type with a TypeConverterAttribute.

하지만 예를 들어, 사전 또는 정적 속성 또는 필드의 값에 항목을 다른 원본 또는 일종의 계산에서 특성을 설정 하기에 편리한 경우가 있습니다.But it's sometimes convenient to set an attribute from a different source, for example, an item in a dictionary, or the value of a static property or field, or from a calculation of some sort.

이 작업을 XAML 태그 확장합니다.This is the job of a XAML markup extension. XAML 태그 확장은 이름이 되지 XML에 대 한 확장입니다.Despite the name, XAML markup extensions are not an extension to XML. XAML은 항상 xml이 유효한 XML입니다.XAML is always legal XML.

코드 인프라The code infrastructure

XAML 태그 확장은 구현 하는 클래스를 IMarkupExtension 인터페이스입니다.A XAML markup extension is a class that implements the IMarkupExtension interface. 이러한 클래스에는 종종 라는 단어가 포함 Extension 해당 이름의 끝에 해당 접미사 없이 하지만 일반적으로 XAML에 나타납니다.Such a class often has the word Extension at the end of its name but usually appears in XAML without that suffix.

다음 XAML 태그 확장은 XAML의 모든 구현에서 지원 됩니다.The following XAML markup extensions are supported by all implementations of XAML:

이러한 네 가지 XAML 태그 확장은 XAML, Xamarin.Forms를 비롯 한 많은 구현에서 지원 됩니다.These four XAML markup extensions are supported by many implementations of XAML, including Xamarin.Forms:

추가 XAML 태그 확장에 연결 하 여 Xamarin.Forms 있기 RelativeLayout :An additional XAML markup extension is included in Xamarin.Forms in connection with RelativeLayout:

정적 멤버에 액세스Accessing static members

사용 된 x:Static 공용 정적 속성, 필드 또는 열거형 멤버의 값으로 특성을 설정할 요소입니다.Use the x:Static element to set an attribute to the value of a public static property, field, or enumeration member. 설정 된 Member 정적 멤버는 속성입니다.Set the Member property to the static member. 지정 하려면 더 쉽게 x:Static 고 중괄호로 멤버 이름입니다.It's usually easier to specify x:Static and the member name in curly braces. 이름을 합니다 Member 속성을 포함 하지 않아도 멤버 자체입니다.The name of the Member property does not need to be included, just the member itself. 이 일반 구문이 나와 합니다 SharedStatics 샘플입니다.This common syntax is shown in the SharedStatics sample. 자체 정적 필드에 정의 되어는 AppConstants 클래스입니다.The static fields themselves are defined in the AppConstants class. 이 기법을 사용 하면 프로그램을 통해 사용 되는 상수를 설정할 수 있습니다.This technique allows you to establish constants used through a program.

XML 네임 스페이스 선언 추가 사용 하 여 참조할 수 있습니다 공용 정적 속성, 필드 또는.NET framework에 정의 된 열거형 멤버에 설명 된 대로 합니다 SystemStatics 샘플 .With an additional XML namespace declaration, you can reference public static properties, fields, or enumeration members defined in the .NET framework, as demonstrated in the SystemStatics sample.

리소스 사전Resource dictionaries

합니다 VisualElement 라는 속성을 정의 하는 클래스 Resources 형식의 개체에 설정할 수 있는 ResourceDictionary 합니다.The VisualElement class defines a property named Resources that you can set to an object of type ResourceDictionary. XAML을 내에서이 사전에 항목을 저장 하 고 확인할 수를 사용 하 여는 x:Key 특성입니다.Within XAML, you can store items in this dictionary and identify them with the x:Key attribute. 리소스 사전에 저장 되어 있는 항목은 항목에 대 한 모든 참조에서 공유 됩니다.The items stored in the resource dictionary are shared among all references to the item.

대부분의 용도 StaticResourceStaticResource for most purposes

대부분의 경우에서 사용 합니다 StaticResource 태그 확장으로 볼 수 있듯이, 리소스 사전에서 항목을 참조 하는 ResourceSharing 샘플 .In most cases you'll use the StaticResource markup extension to reference an item from the resource dictionary, as demonstrated by the ResourceSharing sample. 사용할 수는 StaticResourceExtension 요소 또는 StaticResource 중괄호 내에서:You can use a StaticResourceExtension element or StaticResource within curly braces:

리소스를 공유 하는 triple 스크린샷Triple screenshot of resource sharing

혼동 하지 마십시오 합니다 x:Static 태그 확장 및 StaticResource 태그 확장 합니다.Do not confuse the x:Static markup extension and the StaticResource markup extension.

사전의 트리A tree of dictionaries

XAML 파서를 발견할 경우는 StaticResource, 일치 하는 키에 대 한 시각적 트리 검색을 시작 하 고 다음에서 검색 합니다 ResourceDictionary 응용 프로그램에서 App 클래스입니다.When the XAML parser encounters a StaticResource, it begins searching up the visual tree for a matching key, and then looks in the ResourceDictionary in the application's App class. 이 시각적 트리의 더 높은 리소스 사전 재정의 하려면 시각적 트리의 하위 수준 리소스 사전에 항목을 허용 합니다.This allows items in a resource dictionary deeper in the visual tree to override a resource dictionary higher in the visual tree. 에 설명 되어이 ResourceTrees 샘플입니다.This is demonstrated in the ResourceTrees sample.

DynamicResource 특수 목적을 위해DynamicResource for special purposes

합니다 StaticResource 태그 확장 하는 동안 시각적 트리를 빌드하면 사전에서 검색할 항목으로 인해는 InitializeComponent 호출 합니다.The StaticResource markup extension causes an item to be retrieved from the dictionary when a visual tree is built during the InitializeComponent call. 대 안으로 StaticResource DynamicResource , 사전 키에 대 한 링크를 유지 관리 하며 주요 변경 사항에서 항목을 참조 하는 경우 대상 업데이트 합니다.An alternative to StaticResource is DynamicResource, which maintains a link to the dictionary key and updates the target when the item referenced by the key changes.

차이점 StaticResource 하 고 DynamicResource 에 설명 되어는 DynamicVsStatic 샘플입니다.The difference between StaticResource and DynamicResource is demonstrated in the DynamicVsStatic sample.

속성을 설정 DynamicResource 에 설명 된 대로 바인딩 가능한 속성으로 백업 해야 11 장 바인딩할 수 있는 인프라합니다.A property set by DynamicResource must be backed by a bindable property as discussed in Chapter 11, The bindable infrastructure.

덜 사용 하는 태그 확장Lesser-used markup extensions

사용 된 x:Null 속성을 설정 하는 태그 확장 null합니다.Use the x:Null markup extension to set a property to null.

사용 된 x:Type .net 속성을 설정 하려면 태그 확장 Type 개체입니다.Use the x:Type markup extension to set a property to a .NET Type object.

사용 하 여 x:Array 배열을 정의 합니다.Use x:Array to define an array. 배열 멤버의 유형을 설정 하 여 지정 된 [Type] 속성을는 x:Type 태그 확장 합니다.Specify the type of the array members by setting the [Type] property to an x:Type markup extension.

사용자 지정 태그 확장A custom markup extension

구현 하는 클래스를 작성 하 여 사용자 고유의 XAML 태그 확장을 만들 수 있습니다 합니다 IMarkupExtension 사용 하 여 인터페이스를 ProvideValue 메서드.You can create your own XAML markup extensions by writing a class that implements the IMarkupExtension interface with a ProvideValue method.

합니다 HslColorExtension 클래스에는 이러한 요구 사항을 충족 합니다.The HslColorExtension class satisfies those requirement. 형식의 값을 만들면 Color 명명 된 속성의 값에 따라 HS, L, 및 A합니다.It creates a value of type Color based on values of properties named H, S, L, and A. 이 클래스는 명명 된 Xamarin.Forms 라이브러리의 첫 번째 항목 Xamarin.FormsBook.Toolkit 구축을이 가이드의 과정을 통해 사용 합니다.This class is the first item in a Xamarin.Forms library named Xamarin.FormsBook.Toolkit that is built up and used over the course of this book.

합니다 CustomExtensionDemo 샘플에서는이 라이브러리를 참조 하 고 사용자 지정 태그 확장을 사용 하는 방법을 보여 줍니다.The CustomExtensionDemo sample demonstrates how to reference this library and use the custom markup extension.