MarkupExtension.ProvideValue(IServiceProvider) Méthode

Définition

En cas d’implémentation dans une classe dérivée, retourne un objet fourni comme valeur de la propriété cible pour cette extension de balisage.

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

Paramètres

serviceProvider
IServiceProvider

Assistance du fournisseur de services qui peut fournir des services pour l’extension de balisage.

Retours

Valeur de l’objet à définir sur la propriété où l’extension est appliquée.

Remarques

Lorsqu’un processeur XAML traite un nœud de type et une valeur membre qui est une extension de balisage, il appelle la ProvideValue méthode de cette extension de balisage et écrit le résultat dans le flux de graphique d’objets ou de sérialisation. L’enregistreur d’objets XAML transmet le contexte de service à chacune de ces implémentations via le serviceProvider paramètre.

Pour plus d’informations sur la façon d’implémenter ProvideValue dans une extension de balisage personnalisée, consultez la section « Notes to Implementers ».

Notes d’utilisation WPF

Important

Les classes WPF qui ont des interactions spécifiques avec les opérations de jeu de balisage ne doivent pas s’appuyer sur IReceiveMarkupExtension une implémentation .NET Framework 4. Utilisez XamlSetMarkupExtensionAttributeà la place des rappels attribués.

Notes pour les responsables de l’implémentation

Les services courants retournés par le fournisseur de services par défaut qui sont généralement disponibles pour une implémentation personnalisée ou existante MarkupExtension incluent les services principaux suivants.

  • IProvideValueTarget signale la référence d’objet et un identificateur de propriété à partir du contexte dans lequel l’extension de balisage est utilisée

  • IXamlTypeResolver expose un service qui parallèle au comportement général d’écriture d’objets XAML qui peut fournir un Type nom de type XAML basé sur un nom de type XAML. Le nom peut éventuellement inclure un préfixe pour un espace de noms XAML mappé.

  • IXamlSchemaContextProvider expose directement le contexte de schéma XAML actif. À partir du rapport XamlSchemaContext, vous pouvez obtenir des informations de contexte de schéma XAML telles que la façon dont les assemblys sont mappés pour la prise en charge des types, le préfixe préféré dans les assemblys, les listes de chacun XamlType dans un assembly, etc.

  • D’autres services disponibles pour des scénarios d’extension de balisage plus spécialisés sont les suivants :

Potentiellement, les implémentations de ProvideValue(IServiceProvider) peuvent ignorer le serviceProvider paramètre. Cela est viable pour certains scénarios de base, où aucun contexte n’est nécessaire pour retourner une valeur.

Dans une utilisation classique, les services XAML .NET Framework et les enregistreurs d’objets XAML implémentés fournissent un fournisseur de services à toutes les méthodes de convertisseur de valeur appelées pendant le traitement XAML. Toutefois, pour la robustesse, vous devez fournir des chemins de code pour les valeurs Null à la fois pour le fournisseur de services lui-même et pour tout service demandé. Les valeurs Null peuvent se produire si votre extension de balisage est appliquée dans une circonstance où la prise en charge du service classique fournie par une infrastructure de processeur XAML n’est pas disponible.

Pour plus d’informations sur les services disponibles à partir du contexte du fournisseur de services XAML et sur leur utilisation, consultez Convertisseurs de types et extensions de balisage pour XAML.

Les implémentations qui nécessitent qu’un certain service soit disponible pour produire un résultat utile ProvideValue(IServiceProvider) sont censées lever des exceptions si ce service n’est pas disponible. L’exception recommandée à lever est InvalidOperationException.

L’implémentation peut également lever des exceptions si l’un des arguments dont l’extension de balisage personnalisée a besoin pour fournir une valeur est null, n’est pas valide pour son type de données ou ne contient pas de valeur que l’extension de balisage est capable de traiter. L’exception recommandée à lever est InvalidOperationException.

S’applique à

Voir aussi