Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Преобразователи типов и расширения разметки — это два метода, которые используются системами типов XAML и средствами записи XAML для создания компонентов графа объектов. Хотя они используют некоторые характеристики, преобразователи типов и расширения разметки представлены по-разному в потоке узлов XAML. В этом наборе документации преобразователи типов, расширения разметки и аналогичные конструкции иногда называются преобразователями значений.
Преобразователи значений
В XAML преобразователи значений используются для различных сценариев. В следующем списке показаны различные типы преобразователей значений в XAML:
Преобразователь типов
Расширение разметки
Сериализатор значений
Связанный класс или класс поддержки, предоставляющий логику синтаксиса текста XAML
Преобразователи типов
В определении служб XAML .NET преобразователи типов — это классы, производные от класса CLR TypeConverter . TypeConverter — это класс, который был в .NET до существования XAML. Его первоначальной целью было поддерживать окна свойств и аналогичные текстовые метафоры редактирования для свойств интегрированной среды разработки. Введение XAML в .NET используется TypeConverter для преобразования текстового синтаксиса (как указано в значении атрибута или узле значения XAML) в объект. TypeConverter также можно использовать для сериализации значения объекта в текстовый синтаксис. TypeConverter также использовался в предыдущих реализациях XAML для конкретной платформы в Windows Presentation Foundation (WPF) и Windows Communication Foundation (WCF). Дополнительные сведения о xaml см. в разделе "Общие сведения о TypeConverterпреобразователях типов" для XAML.
Расширения разметки
В реализации служб XAML .NET расширения разметки — это классы, производные MarkupExtension от класса. Расширения разметки — это концепция, которая в этой форме создается языком XAML. Расширение разметки можно рассматривать как то, что представляет собой расширяемую escape-последовательность, которая вызывает класс службы для предоставления логики. С точки зрения разметки процессоры XAML универсально распознают расширение разметки по последовательности текста, которая начинается с открывающей фигурной скобки ({) в текстовой строке.
Расширения разметки отличаются от преобразователей типов. Преобразователи типов обычно связаны с типами или элементами. Они вызываются при создании графа объектов или сериализации синтаксического синтаксиса, связанного с этими сущностями.
Расширения разметки связаны с одним вспомогательным классом службы, но могут применяться для любого значения члена. (Однако расширение разметки можно реализовать, чтобы намеренно ограничить его использование определенными элементами или целевыми типами с помощью контекста службы.) Расширения разметки могут переопределить связь преобразователя типов. Кроме того, можно использовать их для указания значения атрибута для элементов, которые в противном случае не поддерживают текстовый синтаксис.
Дополнительные сведения о шаблоне реализации расширения разметки для XAML см. в разделе "Расширения разметки" для обзора XAML.
Сериализаторы значений
A ValueSerializer — это специализированный преобразователь типов, оптимизированный для преобразования объекта в строку. Для ValueSerializer XAML может не реализовать ConvertFrom
метод вообще. Реализация ValueSerializer получает службы таким образом, как TypeConverter реализация. Виртуальные методы предоставляют входной context
параметр. Параметр context
имеет тип IValueSerializerContext, который наследует от IServiceProvider интерфейса и имеет GetService метод.
В системе типов XAML и для реализаций записи XAML, использующих обработку цикла узлов XAML для сериализации, преобразователь значений, связанный с типом или элементом, сообщается собственным XamlType.ValueSerializer свойством. Смысл записи XAML, выполняющей сериализацию, заключается в том, что если XamlType.TypeConverter и XamlType.ValueSerializer существует, преобразователь типов должен использоваться для пути загрузки, а сериализатор значений должен использоваться для пути сохранения. Если XamlType.TypeConverter существует, но XamlType.ValueSerializer есть null
, преобразователь типов также используется для пути сохранения.
Другие преобразователи значений
Преобразователь значений расширяем за рамки конкретных шаблонов преобразователя типов или расширения разметки. Однако для этой настройки также потребуется переопределение системы типов XAML, предоставляемой службами XAML. Существующая система типов XAML содержит представления и системы отчетов для преобразователей типов, расширений разметки и сериализаторов значений, но не для пользовательских форм преобразования значений. Если вы хотите создать преобразователи пользовательских значений, используйте этот XamlValueConverter<TConverterBase> тип.
Преобразователи типов и расширения разметки в сочетании
Расширения разметки и преобразователи типов используются для различных ситуаций в XAML. Хотя контекст доступен для использования расширения разметки, поведение преобразования типов свойств, где расширение разметки предоставляет значение, как правило, не проверяется в реализации расширения разметки. Другими словами, даже если расширение разметки возвращает текстовую строку в качестве ProvideValue
выходных данных, поведение преобразования типов в этой строке, примененное к определенному свойству или типу значения свойства, не вызывается. Как правило, расширение разметки предназначено для обработки строки и возврата объекта без какого-либо преобразователя типов.
Контекст службы для преобразователя значений
При реализации преобразователя значений часто требуется доступ к контексту, в котором применяется преобразователь значений. Этот контекст называется контекстом службы. Контекст службы может включать такие сведения, как активный контекст схемы XAML, доступ к системе сопоставления типов, которую предоставляет контекст схемы XAML и модуль записи объектов XAML, и т. д. Дополнительные сведения о контекстах служб, доступных для преобразователя значений, и о том, как получить доступ к службам, которые может предоставлять контекст службы, см. в разделе "Контексты служб", доступные для преобразователей типов и расширений разметки.
См. также
.NET Desktop feedback