요약 7 장입니다.Summary of Chapter 7. 코드 및 XAMLXAML vs. code

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

참고

이 페이지에 대 한 참고 사항 Xamarin.Forms 책의 내용을에서 달라졌는지를 위치 하는 영역을 나타냅니다.Notes on this page indicate areas where Xamarin.Forms has diverged from the material presented in the book.

Xamarin.Forms는 XML 기반 태그 언어인 Extensible Application Markup Language 또는 XAML (자 멜 "")를 지원 합니다.Xamarin.Forms supports an XML-based markup language called the Extensible Application Markup Language or XAML (pronounced "zammel"). XAML 대신 C# Xamarin.Forms 응용 프로그램의 사용자 인터페이스의 레이아웃을 정의 및 사용자 인터페이스 요소 간의 바인딩을 정의 하 고 기본 데이터를 제공 합니다.XAML provides an alternative to C# in defining the layout of the user interface of a Xamarin.Forms application, and in defining bindings between user-interface elements and underlying data.

속성 및 특성Properties and attributes

Xamarin.Forms 클래스와 구조체는 XAML에서의 XML 요소가 됩니다 및 이러한 클래스 및 구조체의 속성에는 XML 특성 있게 됩니다.Xamarin.Forms classes and structures become XML elements in XAML, and properties of these classes and structures become XML attributes. XAML에서 인스턴스화할 클래스 매개 변수가 없는 public 생성자를 일반적으로 있어야 합니다.To be instantiated in XAML, a class must generally have a public parameterless constructor. XAML에서 설정 된 속성은 공용 있어야 합니다. set 접근자입니다.Any properties set in XAML must have public set accessors.

기본 데이터 형식의 속성에 대 한 (string, doublebool등), XAML 파서를 사용 하 여 표준 TryParse 특성 설정을 이러한 형식으로 변환 하는 방법입니다.For properties of the basic data types (string, double, bool, and so forth), the XAML parser uses the standard TryParse methods to convert attribute settings to these types. XAML 구문 분석기에는 열거형 형식도 쉽게 처리할 수 있습니다 및 열거형 형식으로 플래그가 지정 되어 있으면 열거형 멤버 결합할 수 있습니다는 Flags 특성입니다.The XAML parser can also easily handle enumeration types, and it can combine enumeration members if the enumeration type is flagged with the Flags attribute.

XAML 파서를 지원 하기 위해 보다 복잡 한 형식 (또는 이러한 형식의 속성) 포함할 수는 TypeConverterAttribute 에서 파생 된 클래스를 식별 하는 TypeConverter 변환할 지 해당 형식에 문자열 값입니다.To assist the XAML parser, more complex types (or properties of those types) can include a TypeConverterAttribute that identifies a class that derives from TypeConverter which supports conversion from string values to those types. 예를 들어 합니다 ColorTypeConverter 변환에 이름 및 "#rrggbb"와 같은 문자열 색 Color 값입니다.For example, the ColorTypeConverter converts color names and strings, such as "#rrggbb", into Color values.

속성 요소 구문Property-element syntax

XAML, 클래스 및에서 생성 되는 개체는 XML 요소로 표현 됩니다.In XAML, classes and the objects created from them are expressed as XML elements. 이러한 라고 요소를 개체합니다.These are known as object elements. 이러한 개체의 속성 대부분은 XML 특성으로 표현 됩니다.Most properties of these objects are expressed as XML attributes. 이러한 이라고 속성 특성합니다.These are called property attributes.

경우에 따라 속성을 간단한 문자열로 표현할 수 없는 개체에 설정 되어야 합니다.Sometimes a property must be set to an object that cannot be expressed as a simple string. 이 경우 XAML 지원 이라는 태그를 property 요소 클래스 이름 및 속성 이름의 마침표로 구분 하 여 구성 된 합니다.In such a case, XAML supports a tag called a property element that consists of the class name and property name separated by a period. 개체 요소나 속성 요소 태그 쌍 내에서 다음 나타날 수 있습니다.An object element can then appear within a pair of property-element tags.

프로젝트에 XAML 페이지 추가Adding a XAML page to your project

Xamarin.Forms 이식 가능한 클래스 라이브러리를 기존 프로젝트에 XAML 페이지를 추가할 수 있습니다 또는 처음 만들어질 때 XAML 페이지를 포함할 수 있습니다.A Xamarin.Forms Portable Class Library can contain a XAML page when it is first created, or you can add a XAML page to an existing project. 새 항목을 추가 하려면 대화 상자에서 XAML 페이지를 가리키는 항목을 선택 또는 ContentPage 및 XAML입니다.In the dialog to add a new item, choose the item that refers to a XAML page, or ContentPage and XAML. (하지는 ContentView.)(Not a ContentView.)

참고

Visual Studio 옵션은이 챕터에서 작성 된 이후 변경 되었습니다.Visual Studio options have changed since this chapter was written.

두 개의 파일이 만들어집니다: XAML 파일을 파일 이름 확장명이.xaml 및 C# 파일 확장명이. xaml.cs.Two files are created: a XAML file with the filename extension .xaml, and a C# file with the extension .xaml.cs. C# 파일은 라고도 합니다 코드 숨김 XAML 파일의 합니다.The C# file is often referred to as the code-behind of the XAML file. 코드 숨김 파일에서 파생 되는 partial 클래스 정의 ContentPage합니다.The code-behind file is a partial class definition that derives from ContentPage. 빌드 시에는 XAML 구문 분석 하 고 다른 partial 클래스 정의 동일한 클래스에 대 한 생성 됩니다.At build time, the XAML is parsed and another partial class definition is generated for the same class. 이렇게 생성 된 클래스 라는 메서드가 포함 되어 InitializeComponent 코드 숨김 파일의 생성자에서 호출 되는 합니다.This generated class includes a method named InitializeComponent that is called from the constructor of the code-behind file.

끝날 때 런타임에 InitializeComponent 호출, 모든 XAML 파일의 요소는 인스턴스화되고 것 처럼 C# 코드에서 만들어진 것을 초기화 합니다.During runtime, at the conclusion of the InitializeComponent call, all the elements of the XAML file have been instantiated and initialized just as if they had been created in C# code.

XAML 파일의 루트 요소는 ContentPage합니다.The root element in the XAML file is ContentPage. 루트 태그에는 Xamarin.Forms 요소 및 다른 정의 대 한 두 개 이상의 XML 네임 스페이스 선언이 포함 되어 있습니다.는 x 요소 및 특성의 모든 XAML 구현에 내장 함수에 대 한 접두사입니다.The root tag contains at least two XML namespace declarations, one for the Xamarin.Forms elements and the other defining an x prefix for elements and attributes intrinsic to all XAML implementations. 루트 태그 포함 되어는 x:Class 에서 파생 된 클래스의 이름과 네임 스페이스를 나타내는 특성 ContentPage합니다.The root tag also contains an x:Class attribute that indicates the namespace and name of the class that derives from ContentPage. 이 코드 숨김 파일에서 네임 스페이스 및 클래스 이름과 일치 합니다.This matches the namespace and class name in the code-behind file.

XAML 및 코드의 조합에서 보여 주는 것은 CodePlusXaml 샘플입니다.The combination of XAML and code is demonstrated by the CodePlusXaml sample.

XAML 컴파일러The XAML compiler

Xamarin.Forms XAML 컴파일러를 갖지만 사용에 따라 해당 사용은 선택 사항를 XamlCompilationAttribute 합니다.Xamarin.Forms has a XAML compiler, but its use is optional based on the use of a XamlCompilationAttribute. XAML을 컴파일되지 않은 경우 빌드 시에는 XAML 구문 분석 및 PCL을 여기서도 구문을 분석 하는 런타임 시에 XAML 파일을 포함 됩니다.If the XAML is not compiled, the XAML is parsed at build time, and the XAML file is embedded in the PCL, where it is also parsed at runtime. XAML, 컴파일된 경우 빌드 프로세스 이진 형식으로 변환 된 XAML 및 런타임 처리 프로세스를 더 효율적입니다.If the XAML is compiled, the build process converts the XAML into a binary form, and the runtime processing is more efficient.

XAML 파일의 플랫폼 특이성Platform specificity in the XAML file

XAML에 OnPlatform 플랫폼에 종속 된 태그를 선택 하는 클래스를 사용할 수 있습니다.In XAML, the OnPlatform class can be used to select platform-dependent markup. 제네릭 클래스 이며 인스턴스화할 해야는 x:TypeArguments 대상 형식과 일치 하는 특성입니다.This is a generic class and must be instantiated with an x:TypeArguments attribute that matches the target type. 합니다 OnIdiom 클래스와 유사 하지만 사용 되는 많지 않습니다.The OnIdiom class is similar but used much less often.

사용 OnPlatform 출판 된 이후 변경 되었습니다.The use of OnPlatform has changed since the book was published. 명명 된 속성을 사용 하 여 함께에서 원래 사용 된 것 iOS, Android, 및 WinPhone합니다.It was originally used in conjunction with properties named iOS, Android, and WinPhone. 자식 사용 하는 이제 On 개체입니다.It is now used with child On objects. 설정 합니다 Platform 공용와 일치 하는 문자열 속성 const 의 필드를 Device 클래스입니다.Set the Platform property to a string consistent with the public const fields of the Device class. 설정 합니다 Value 속성 값과 일치 합니다 x:TypeArguments 특성은 OnPlatform 태그.Set the Value property to a value consistent with the x:TypeArguments attribute of the OnPlatform tag.

OnPlatform 에 설명 되어는 ScaryColorList 샘플에서는 소위 거의 동일한 XAML의 요소를 포함 하기 때문에 있습니다.OnPlatform is demonstrated in the ScaryColorList sample, so called because it contains blocks of nearly identical XAML. 이 반복적으로 태그의 존재 여부 기술을 줄이는 것을 사용할 수 있어야 한다는 것을 제안 합니다.The existence of this repetitious markup suggests that techniques should be available to reduce it.

콘텐츠 속성 특성The content property attributes

일부 속성 요소를 매우 빈번 하 게 발생 같은 합니다 <ContentPage.Content> 태그의 루트 요소에는 ContentPage, 또는 <StackLayout.Children> 태그의 자식을 포함 하는 StackLayout합니다.Some property elements occur quite frequently, such as the <ContentPage.Content> tag on the root element of a ContentPage, or the <StackLayout.Children> tag that encloses the children of StackLayout.

모든 클래스는 하나의 속성을 식별 하려면 사용할 수는 ContentPropertyAttribute 클래스에 있습니다.Every class is allowed to identify one property with a ContentPropertyAttribute on the class. 이 속성에 대 한 속성 요소 태그 필요 하지 않습니다.For this property, the property-element tags are not required. ContentPage 해당 콘텐츠 속성으로 정의 Content, 및 Layout<T> (클래스 StackLayout 파생)의 content 속성으로 정의 Children합니다.ContentPage defines its content property as Content, and Layout<T> (the class from which StackLayout derives) defines its content property as Children. 이러한 속성 요소 태그 필요 하지 않습니다.These property element tags are not required.

속성 요소의 LabelText합니다.The property element of Label is Text.

서식 있는 텍스트Formatted text

TextVariations 설정의 몇 가지 예제를 포함 하는 샘플 합니다 TextFormattedText 의 속성 Label합니다.The TextVariations sample contains several examples of setting the Text and FormattedText properties of Label. XAML을 Span 개체의 자식으로 표시 된 FormattedString 개체입니다.In XAML, Span objects appear as children of the FormattedString object.

여러 줄 문자열 설정 된 경우는 Text 속성인 줄 끝 문자는 공백 문자 변환 되지만 줄 끝 문자를 여러 줄 문자열의 내용으로 표시 될 때 유지 됩니다 합니다 Label 또는 Label.Text 태그:When a multiline string is set to the Text property, end-of-line characters are converted to space characters, but the end-of-line characters are preserved when a multiline string appears as content of the Label or Label.Text tags:

공유 텍스트 변형의 삼중 스크린 샷Triple screenshot of text variations sharing