MarkupExtension.ProvideValue(IServiceProvider) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
En cas d’implémentation dans une classe dérivée, retourne un objet qui est fourni comme valeur de la propriété cible de 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 de fournisseur de service qui peut fournir des services pour l’extension de balisage.
Retours
Valeur d’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 de 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 graphe d’objets ou le flux 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 l’implémentation ProvideValue dans une extension de balisage personnalisée, consultez la section « Remarques aux implémenteurs ».
Remarques sur l'utilisation de 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 pour une implémentation de .NET Framework 4. Utilisez XamlSetMarkupExtensionAttributeà la place des rappels avec attributs.
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 où l’extension de balisage est utilisée
IXamlTypeResolver expose un service qui met en parallèle le comportement d’écriture d’objet XAML général qui peut fournir un Type 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.
Voici d’autres services disponibles pour des scénarios d’extension de balisage plus spécialisés :
Potentiellement, les implémentations de ProvideValue(IServiceProvider) peuvent ignorer le serviceProvider
paramètre . Cela est viable dans 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 des fins de 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é. Des valeurs Null peuvent se produire si votre extension de balisage est appliquée dans une situation où la prise en charge du service standard 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 la disponibilité d’un certain service 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 une valeur que l’extension de balisage est capable de traiter. L’exception recommandée à lever est InvalidOperationException.