MarkupExtension.ProvideValue(IServiceProvider) Método

Definición

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.When implemented in a derived class, returns an object that is provided as the value of the target property for this markup extension.

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

Asistente del proveedor de servicios que puede prestar servicios para la extensión de marcado.A service provider helper that can provide services for the markup extension.

Devoluciones

Valor de objeto que se va a establecer en la propiedad a la que se aplica la extensión.The object value to set on the property where the extension is applied.

Comentarios

Cuando un procesador XAML procesa un nodo de tipo y un valor de miembro que es una extensión de marcado, ProvideValue invoca el método de esa extensión de marcado y escribe el resultado en el gráfico de objetos o en la secuencia de serialización.When a XAML processor processes a type node and member value that is a markup extension, it invokes the ProvideValue method of that markup extension and writes the result into the object graph or serialization stream. El escritor de objetos XAML pasa el contexto de servicio a cada una serviceProvider de estas implementaciones a través del parámetro.The XAML object writer passes service context to each such implementation through the serviceProvider parameter.

Vea la sección "notas a los implementadores" para obtener más información sobre ProvideValue cómo implementar en una extensión de marcado personalizada.See "Notes to Implementers" section for more information on how to implement ProvideValue in a custom markup extension.

Notas de uso de WPFWPF Usage Notes

Importante

Las clases de WPF que tienen interacciones específicas con operaciones de conjunto de IReceiveMarkupExtension marcado no .NET Framework 4.NET Framework 4 deben confiar en para una implementación de.WPF classes that have specific interactions with markup set operations should not rely on IReceiveMarkupExtension for a .NET Framework 4.NET Framework 4 implementation. Usar XamlSetMarkupExtensionAttributedevoluciones de llamada con atributos en su lugar.Use XamlSetMarkupExtensionAttribute-attributed callbacks instead.

Notas a los desarrolladores de herederos

Los servicios comunes devueltos por el proveedor de servicios predeterminado que normalmente está disponible para MarkupExtension una implementación personalizada o existente incluyen los siguientes servicios principales.Common services returned by the default service provider that is typically available to a custom or existing MarkupExtension implementation include the following primary services.

  • IProvideValueTargetinforma de la referencia de objeto y un identificador de propiedad del contexto en el que se utiliza la extensión de marcado.
  • IProvideValueTarget reports the object reference and a property identifier from the context where the markup extension is used
  • IXamlTypeResolverexpone un servicio que es paralelo al comportamiento de escritura de objetos XAML general que puede proporcionar Type un basado en un nombre de tipo XAML.
  • IXamlTypeResolver exposes a service that parallels the general XAML object writing behavior that can provide a Type based on a XAML type name.
  • Opcionalmente, el nombre puede incluir un prefijo para un espacio de nombres XAML asignado.The name can optionally include a prefix for a mapped XAML namespace.
  • IXamlSchemaContextProviderexpone directamente el contexto de esquema XAML activo.
  • IXamlSchemaContextProvider exposes the active XAML schema context directly.
  • En el comunicado XamlSchemaContext, puede obtener información de contexto de esquema XAML, como la forma de asignar los ensamblados para la compatibilidad de tipos, el prefijo preferido en los ensamblados, las listas de cada uno XamlType de los ensamblados, etc.From the reported XamlSchemaContext, you can obtain XAML schema context information such as how assemblies are mapped for type support, preferred prefix in assemblies, lists of each XamlType in an assembly, and so on.

    -Otros servicios disponibles para escenarios de extensión de marcado más especializados incluyen:- Other services available for more specialized markup extension scenarios include: - IUriContext

    -   <xref data-throw-if-not-resolved="true" uid="System.Xaml.IAmbientProvider"></xref>  
    
    -   <xref data-throw-if-not-resolved="true" uid="System.Xaml.IDestinationTypeProvider"></xref>  
    
    -   <xref data-throw-if-not-resolved="true" uid="System.Xaml.IRootObjectProvider"></xref>  
    
    -   <xref data-throw-if-not-resolved="true" uid="System.Xaml.IXamlNameResolver"></xref>  
    
    -   <xref data-throw-if-not-resolved="true" uid="System.Xaml.IXamlNamespaceResolver"></xref>  
    

    Potencialmente, las implementaciones ProvideValue(IServiceProvider) de pueden omitir el serviceProvider parámetro.Potentially, implementations of ProvideValue(IServiceProvider) can ignore the serviceProvider parameter. Esto es viable en algunos escenarios básicos, donde no se requiere ningún contexto para devolver un valor.This is viable for some basic scenarios, where no context at all is required for returning a value.

    En el uso típico, el .NET Framework los servicios XAML 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 de XAML.In typical usage, the .NET Framework XAML Services and the implemented XAML object writers will provide a service provider to all value converter methods that are invoked during XAML processing. Sin embargo, para una solidez, debe proporcionar rutas de acceso de código para valores NULL para el propio proveedor de servicios y para cualquier servicio solicitado.However, for robustness, you should provide code paths for null values both for the service provider itself and for any requested service. Es posible que se produzcan valores NULL si se aplica la extensión de marcado en un caso en el que la compatibilidad de servicio típica proporcionada por una infraestructura de procesador XAML no esté disponible.Null values might occur if your markup extension is applied in a circumstance where the typical service support provided by a XAML processor infrastructure is not available.

    Para obtener más información sobre los servicios disponibles en el contexto del proveedor de servicios XAML y cómo usarlos, vea convertidores de tipos y extensiones de marcado para XAML.For more information on available services from the XAML service provider context and how to use them, see Type Converters and Markup Extensions for XAML.

    Se espera que las implementaciones que requieren un determinado servicio estén disponibles para producir un ProvideValue(IServiceProvider) resultado útil que produzcan excepciones si ese servicio no está disponible.Implementations that require a certain service to be available in order to produce a useful ProvideValue(IServiceProvider) result are expected to throw exceptions if that service is not available. La excepción recomendada para iniciar es InvalidOperationException.The recommended exception to throw is InvalidOperationException.

    La implementación también puede producir excepciones si uno de los argumentos que necesita la extensión de marcado personalizada 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.The implementation may also throw exceptions if one of the arguments that the custom markup extension needs in order to provide a value is null, is invalid for its data type, or does not contain a value that the markup extension is capable of processing. La excepción recomendada para iniciar es InvalidOperationException.The recommended exception to throw is InvalidOperationException.

    Se aplica a

    Consulte también: