Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Примечание.
Эта книга была опубликована весной 2016 года и с тех пор не обновлялась. Многое в этой книге остается ценным, но некоторые материалы устарели, а некоторые разделы перестали быть полностью верными или полными.
Xamarin.Forms поддерживает язык разметки XAML, основанный на формате XML. Это название расшифровывается как "расширяемый язык разметки для приложений" (Extensible Application Markup Language) и произносится "заммель". XAML можно использовать вместо C# для определения макета пользовательского интерфейса в приложении Xamarin.Forms и для определения привязок между элементами пользовательского интерфейса и базовыми данными.
Свойства и атрибуты
Классы и структуры Xamarin.Forms в формате XAML становятся XML-элементами, а свойства этих классов и структур становятся XML-атрибутами. Чтобы стать экземпляром XAML, класс должен иметь открытый конструктор без параметров. Для всех свойств в XAML должны существовать открытые методы доступа set.
Для свойств базовых типов данных (string, double, bool и т. д.) средство синтаксического анализа XAML использует стандартные методы TryParse, чтобы преобразовать параметры атрибутов в эти типы. Средство синтаксического анализа XAML также может легко управлять типами перечисления и комбинировать члены перечисления, если тип перечисления помечен атрибутом Flags.
Чтобы помочь средству синтаксического анализа XAML, более сложные типы (или свойства этих типов) могут включать TypeConverterAttribute с определением класса, производного от TypeConverter и поддерживающего преобразование строковых значений в эти типы. Например, ColorTypeConverter преобразует имена и строковые значения цветов, такие как "#rrggbb", в значения Color.
Синтаксис "элемент — свойство"
В XAML классы и созданные из них объекты выражаются в виде XML-элементов. Они называются здесь объектными элементами. Большинство свойств этих объектов выражаются в виде XML-атрибутов. Они, в свою очередь, называются атрибутами свойств.
Иногда свойству нужно присвоить объект, который невозможно выразить простой строкой. Для таких случаев XAML поддерживает тег типа элемент — свойство, который состоит из имени класса и имени свойства, разделенных точкой. Объектный элемент может присутствовать в паре тегов "элемент — свойство".
Добавление страницы XAML в проект
Переносимая библиотека классов Xamarin.Forms может содержать страницу XAML при первом создании, а также вы можете добавить страницу XAML в уже существующий проект. В диалоговом окне добавления нового элемента выберите элемент, который ссылается на страницу XAML, или ContentPage и XAML. (Нельзя использовать ContentView.)
Примечание.
Параметры Visual Studio изменились с момента написания этой главы.
Создаются два файла: XAML-файл с расширением .xaml и файл C# с расширением .xaml.cs. Этот файл C# часто называют кодом программной части для XAML-файла. Файл кода программной части содержит определение разделяемого класса, производное от ContentPage. Во время сборки анализируется файл XAML и для того же класса создается второе определение разделяемого класса. Этот созданный класс включает метод с именем InitializeComponent, который вызывается из конструктора в файле кода программной части.
Во время выполнения при завершении вызова InitializeComponent все элементы XAML-файла уже созданы и инициализированы так же, как если бы они были созданы в коде C#.
Корневой элемент в файле XAML — это ContentPage. Корневой тег содержит по крайней мере два объявления пространств имен XML: одно для элементов Xamarin.Forms, а второе определяет префикс x для элементов и атрибутов, встроенных во все реализации XAML. Корневой тег также содержит атрибут x:Class, который указывает на пространство имен и имя класса, производного от ContentPage. Они соответствуют пространству имен и имени класса в файле кода программной части.
Такое сочетание XAML и кода демонстрируется в примере CodePlusXaml.
Компилятор XAML
В Xamarin.Forms есть собственный компилятор XAML, но его использование не является обязательным и определяется использованием XamlCompilationAttribute. Если XAML не компилируется, XAML-файл анализируется во время сборки и внедряется в PCL, где снова анализируется во время выполнения. Если XAML компилируется, процесс сборки преобразует XAML в двоичный код, и благодаря этому обработка в среде выполнения становится эффективнее.
Особенности платформ в XAML-файле
В XAML класс OnPlatform можно использовать для выбора разметки, зависящей от платформы. Это универсальный класс, экземпляр которого должен создаваться с атрибутом x:TypeArguments, который соответствует целевому типу. Класс OnIdiom используется так же, но не очень распространен.
Использование OnPlatform изменилось с момента публикации книги. Изначально он использовался в сочетании со свойствами с именами iOS, Android и WinPhone. Теперь он применяется с дочерними объектами On. Задайте для свойства Platform строковое значение, соответствующее общим полям const класса Device. Задайте для свойства Value значение, соответствующее атрибуту x:TypeArguments тега OnPlatform.
OnPlatform демонстрируется в примере ScaryColorList. Название примера связано с тем, что в нем есть несколько практически идентичных блоков XAML. Существование таких повторов разметки предполагает, что должны существовать и методы для их сокращения.
Атрибуты свойства содержимого
Некоторые элементы свойств встречаются довольно часто, например тег <ContentPage.Content> в корневом элементе ContentPage или тег <StackLayout.Children> с дочерними элементами StackLayout.
Каждому классу разрешается определить одно свойство ContentPropertyAttribute. Для этого свойства теги "свойство — элемент" не являются обязательными. ContentPage определяет свойство содержимого как Content, а Layout<T> (класс, от которого наследуется StackLayout) определяет свойство содержимого как Children. Эти теги "свойство — элемент" не являются обязательными.
Для Label тег "свойство — элемент" имеет значение Text.
Форматированный текст
Пример TextVariations содержит несколько операций присвоения свойство Text и FormattedText для Label. В XAML объекты Span отображаются как дочерние элементы объекта FormattedString.
При присвоении свойству Text многострочного строкового значения все символы конца строки преобразуются в пробелы, но эти символы конца строки сохраняются, если многострочная строка используется как содержимое тегов Label или Label.Text.
