Поделиться через


MarkupExtension.ProvideValue(IServiceProvider) Метод

Определение

При реализации в производном классе возвращает объект, предоставляемый как значение целевого свойства для данного расширения разметки.

public:
 abstract System::Object ^ ProvideValue(IServiceProvider ^ serviceProvider);
public abstract object ProvideValue (IServiceProvider serviceProvider);
abstract member ProvideValue : IServiceProvider -> obj
Public MustOverride Function ProvideValue (serviceProvider As IServiceProvider) As Object

Параметры

serviceProvider
IServiceProvider

Вспомогательный объект поставщика служб, способный предоставлять службы для расширения разметки.

Возвращаемое значение

Значение объекта, которое необходимо присвоить свойству, где применяется расширение.

Комментарии

Когда обработчик XAML обрабатывает узел типа и значение члена, которые являются расширением разметки ProvideValue , он вызывает метод этого расширения разметки и записывает результат в граф объекта или поток сериализации. Модуль записи объектов XAML передает контекст службы каждой такой реализации с помощью serviceProvider параметра .

Дополнительные сведения о реализации ProvideValue в пользовательском расширении разметки см. в разделе "Примечания для разработчиков".

Примечания об использовании WPF

Важно!

Классы WPF, которые имеют определенные взаимодействия с операциями набора разметки, не должны полагаться на IReceiveMarkupExtension реализацию платформа .NET Framework 4. Вместо этого используйте XamlSetMarkupExtensionAttributeобратные вызовы с атрибутами .

Примечания для тех, кто реализует этот метод

Общие службы, возвращаемые поставщиком услуг по умолчанию, которые обычно доступны для пользовательской или существующей MarkupExtension реализации, включают следующие основные службы.

  • IProvideValueTarget сообщает ссылку на объект и идентификатор свойства из контекста, в котором используется расширение разметки.

  • IXamlTypeResolver предоставляет службу, которая параллельно выполняет общее поведение записи объекта XAML, которое может предоставить Type на основе имени типа XAML. При необходимости имя может содержать префикс для сопоставленного пространства имен XAML.

  • IXamlSchemaContextProvider предоставляет активный контекст схемы XAML напрямую. Из сообщаемого XamlSchemaContextможно получить сведения о контексте схемы XAML, такие как сопоставление сборок для поддержки типов, предпочтительный префикс в сборках, списки каждой из них XamlType в сборке и т. д.

  • Другие службы, доступные для более специализированных сценариев расширения разметки, включают:

Возможно, реализации ProvideValue(IServiceProvider) могут игнорировать serviceProvider параметр . Это применимо в некоторых базовых сценариях, где для возврата значения не требуется контекст.

При обычном использовании платформа .NET Framework службы XAML и реализованные средства записи объектов XAML предоставляют поставщик услуг для всех методов преобразователя значений, которые вызываются во время обработки XAML. Однако для обеспечения надежности следует указать пути кода для значений NULL как для самого поставщика услуг, так и для любой запрошенной службы. Значения NULL могут возникать, если расширение разметки применяется в условиях, когда типичная поддержка служб, предоставляемая инфраструктурой процессора XAML, недоступна.

Дополнительные сведения о доступных службах из контекста поставщика служб XAML и их использовании см. в разделе Преобразователи типов и расширения разметки для XAML.

Реализации, требующие доступности определенной службы для получения полезного ProvideValue(IServiceProvider) результата, должны вызывать исключения, если эта служба недоступна. Рекомендуемое исключение — InvalidOperationException.

Реализация также может вызывать исключения, если один из аргументов, необходимых расширению пользовательской разметки для предоставления значения, имеет значение NULL, является недопустимым для своего типа данных или не содержит значение, которое может обрабатывать расширение разметки. Рекомендуемое исключение — InvalidOperationException.

Применяется к

См. также раздел