MarkupExtension.ProvideValue(IServiceProvider) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Cuando se implementa en una clase derivada, devuelve un objeto que se proporciona como el valor de la propiedad de destino para esta extensión de marcado.
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
Parámetros
- serviceProvider
- IServiceProvider
Un asistente del proveedor de servicios que puede prestar servicios para la extensión de marcado.
Devoluciones
Valor de objeto que se va a establecer en la propiedad a la que se aplica la extensión.
Comentarios
Cuando un procesador XAML procesa un nodo de tipo y un valor de miembro que es una extensión de marcado, invoca el ProvideValue método de esa extensión de marcado y escribe el resultado en el gráfico de objetos o el flujo de serialización. El escritor de objetos XAML pasa el contexto del servicio a cada una de estas implementaciones a través del serviceProvider
parámetro .
Consulte la sección "Notas a los implementadores" para obtener más información sobre cómo implementar ProvideValue en una extensión de marcado personalizada.
Notas de uso de WPF
Importante
Las clases de WPF que tienen interacciones específicas con las operaciones del conjunto de marcado no deben depender IReceiveMarkupExtension de una implementación de .NET Framework 4. Use XamlSetMarkupExtensionAttributedevoluciones de llamada con atributos en su lugar.
Notas a los implementadores
Los servicios comunes devueltos por el proveedor de servicios predeterminado que normalmente está disponible para una implementación personalizada o existente MarkupExtension incluyen los siguientes servicios principales.
IProvideValueTarget notifica la referencia de objeto y un identificador de propiedad desde el contexto donde se usa la extensión de marcado.
IXamlTypeResolver expone un servicio que en paralelo el comportamiento general de escritura de objetos XAML que puede proporcionar un Type basado en un nombre de tipo XAML. Opcionalmente, el nombre puede incluir un prefijo para un espacio de nombres XAML asignado.
IXamlSchemaContextProvider expone directamente el contexto de esquema XAML activo. En el objeto notificado XamlSchemaContext, puedes obtener información de contexto de esquema XAML, como cómo se asignan los ensamblados para la compatibilidad con tipos, prefijo preferido en ensamblados, listas de cada XamlType uno de ellos en un ensamblado, etc.
Otros servicios disponibles para escenarios de extensión de marcado más especializados incluyen:
Potencialmente, las implementaciones de ProvideValue(IServiceProvider) pueden omitir el serviceProvider
parámetro . Esto es viable para algunos escenarios básicos, donde no se requiere ningún contexto para devolver un valor.
En el uso típico, los servicios XAML de .NET Framework y los escritores de objetos XAML implementados proporcionarán un proveedor de servicios a todos los métodos de convertidor de valores que se invocan durante el procesamiento XAML. Sin embargo, para mejorar la solidez, debe proporcionar rutas de acceso de código para valores NULL tanto para el propio proveedor de servicios como para cualquier servicio solicitado. Es posible que se produzcan valores NULL si la extensión de marcado se aplica en una circunstancia en la que la compatibilidad de servicio típica proporcionada por una infraestructura de procesador XAML no está disponible.
Para obtener más información sobre los servicios disponibles desde el contexto del proveedor de servicios XAML y cómo usarlos, consulta Convertidores de tipos y extensiones de marcado para XAML.
Se espera que las implementaciones que requieren que un determinado servicio esté disponible para generar un resultado útil ProvideValue(IServiceProvider) produzcan excepciones si ese servicio no está disponible. La excepción recomendada para iniciar es InvalidOperationException.
La implementación también puede producir excepciones si uno de los argumentos que necesita la extensión de marcado personalizado para proporcionar un valor es NULL, no es válido para su tipo de datos o no contiene un valor que la extensión de marcado sea capaz de procesar. La excepción recomendada para iniciar es InvalidOperationException.