MarkupExtension.ProvideValue(IServiceProvider) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
In caso di implementazione in una classe derivata, restituisce un oggetto fornito come valore della proprietà di destinazione per questa estensione di markup.
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
Parametri
- serviceProvider
- IServiceProvider
Helper del provider di servizi che può fornire servizi per l'estensione di markup.
Restituisce
Valore dell'oggetto da impostare sulla proprietà in cui viene applicata l'estensione.
Commenti
Quando un processore XAML elabora un nodo di tipo e un valore membro che è un'estensione di markup, richiama il ProvideValue metodo dell'estensione di markup e scrive il risultato nel grafico oggetto o nel flusso di serializzazione. Il writer di oggetti XAML passa il contesto del servizio a ogni implementazione tramite il serviceProvider
parametro .
Per altre informazioni su come implementare ProvideValue in un'estensione di markup personalizzata, vedere la sezione "Notes to Implementers".
Note sull'utilizzo di WPF
Importante
Le classi WPF con interazioni specifiche con le operazioni del set di markup non devono basarsi su IReceiveMarkupExtension per un'implementazione di .NET Framework 4. Usare XamlSetMarkupExtensionAttributeinvece callback con attributi.
Note per gli implementatori
I servizi comuni restituiti dal provider di servizi predefinito che in genere è disponibile per un'implementazione personalizzata o esistente MarkupExtension includono i servizi primari seguenti.
IProvideValueTarget segnala il riferimento all'oggetto e un identificatore di proprietà dal contesto in cui viene usata l'estensione di markup
IXamlTypeResolver espone un servizio che parallela il comportamento generale di scrittura degli oggetti XAML che può fornire un Type oggetto basato su un nome di tipo XAML. Il nome può facoltativamente includere un prefisso per uno spazio dei nomi XAML mappato.
IXamlSchemaContextProvider espone direttamente il contesto dello schema XAML attivo. Dall'oggetto segnalato XamlSchemaContextè possibile ottenere informazioni sul contesto dello schema XAML, ad esempio il mapping degli assembly per il supporto dei tipi, il prefisso preferito negli assembly, gli elenchi di ognuno XamlType in un assembly e così via.
Altri servizi disponibili per scenari di estensione di markup più specializzati includono:
Potenzialmente, le implementazioni di ProvideValue(IServiceProvider) possono ignorare il serviceProvider
parametro . Ciò è valido per alcuni scenari di base, in cui non è necessario alcun contesto per restituire un valore.
In genere, i servizi XAML di .NET Framework e i writer di oggetti XAML implementati forniranno un provider di servizi a tutti i metodi del convertitore di valori richiamati durante l'elaborazione XAML. Tuttavia, per garantire l'affidabilità, è necessario fornire percorsi di codice per i valori Null sia per il provider di servizi stesso che per qualsiasi servizio richiesto. I valori Null possono verificarsi se l'estensione di markup viene applicata in una circostanza in cui il supporto tipico del servizio fornito da un'infrastruttura del processore XAML non è disponibile.
Per altre informazioni sui servizi disponibili dal contesto del provider di servizi XAML e su come usarli, vedi Convertitori di tipi ed estensioni di markup per XAML.
Le implementazioni che richiedono la disponibilità di un determinato servizio per produrre un risultato utile ProvideValue(IServiceProvider) generano eccezioni se tale servizio non è disponibile. L'eccezione consigliata da generare è InvalidOperationException.
L'implementazione può anche generare eccezioni se uno degli argomenti necessari all'estensione di markup personalizzata per fornire un valore è Null, non è valido per il tipo di dati o non contiene un valore che l'estensione di markup è in grado di elaborare. L'eccezione consigliata da generare è InvalidOperationException.