MarkupExtension.ProvideValue(IServiceProvider) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Po zaimplementowaniu w klasie pochodnej zwraca obiekt podany jako wartość właściwości docelowej dla tego rozszerzenia znaczników.
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
Parametry
- serviceProvider
- IServiceProvider
Pomocnik dostawcy usług, który może świadczyć usługi dla rozszerzenia znaczników.
Zwraca
Wartość obiektu, która ma zostać ustawiona we właściwości, w której zastosowano rozszerzenie.
Uwagi
Gdy procesor XAML przetwarza węzeł typu i wartość składową, która jest rozszerzeniem znaczników, wywołuje ProvideValue metodę tego rozszerzenia znaczników i zapisuje wynik w grafie obiektu lub strumieniu serializacji. Składnik zapisywania obiektów XAML przekazuje kontekst usługi do każdej takiej implementacji za pomocą parametru serviceProvider
.
Zobacz sekcję "Uwagi do implementatorów", aby uzyskać więcej informacji na temat implementowania ProvideValue w niestandardowym rozszerzeniu znaczników.
Uwagi o użyciu WPF
Ważne
Klasy WPF, które mają określone interakcje z operacjami zestawu znaczników, nie powinny polegać na IReceiveMarkupExtension implementacji .NET Framework 4. Zamiast tego należy użyć XamlSetMarkupExtensionAttributewywołań zwrotnych przypisanych.
Uwagi dotyczące implementowania
Typowe usługi zwracane przez domyślnego dostawcę usług, który jest zwykle dostępny dla niestandardowej lub istniejącej MarkupExtension implementacji, obejmują następujące usługi podstawowe.
IProvideValueTarget zgłasza odwołanie do obiektu i identyfikator właściwości z kontekstu, w którym jest używane rozszerzenie znaczników
IXamlTypeResolver Uwidacznia usługę, która jest równoległa do ogólnego zachowania zapisywania obiektów XAML, które mogą zapewnić Type na podstawie nazwy typu XAML. Nazwa może opcjonalnie zawierać prefiks mapowanego przestrzeni nazw XAML.
IXamlSchemaContextProvider uwidacznia aktywny kontekst schematu XAML bezpośrednio. W raporcie XamlSchemaContextmożna uzyskać informacje kontekstowe schematu XAML, takie jak sposób mapowania zestawów pod kątem obsługi typów, preferowany prefiks w zestawach, listy każdego z nich XamlType w zestawie itd.
Inne usługi dostępne dla bardziej wyspecjalizowanych scenariuszy rozszerzenia znaczników obejmują:
Potencjalnie implementacje ProvideValue(IServiceProvider) programu mogą ignorować serviceProvider
parametr. Jest to opłacalne w przypadku niektórych podstawowych scenariuszy, w których do zwracania wartości nie jest wymagany żaden kontekst.
W typowym użyciu .NET Framework usług XAML i zaimplementowanych składników zapisywania obiektów XAML zapewni dostawcę usług do wszystkich metod konwertera wartości wywoływanych podczas przetwarzania XAML. Jednak w celu zapewnienia niezawodności należy podać ścieżki kodu dla wartości null zarówno dla samego dostawcy usług, jak i dla dowolnej żądanej usługi. Wartości null mogą wystąpić, jeśli rozszerzenie znaczników jest stosowane w sytuacji, gdy typowa obsługa usługi zapewniana przez infrastrukturę procesora XAML jest niedostępna.
Aby uzyskać więcej informacji na temat dostępnych usług z kontekstu dostawcy usług XAML i sposobu ich używania, zobacz Konwertery typów i Rozszerzenia znaczników dla języka XAML.
Implementacje, które wymagają udostępnienia określonej usługi w celu wygenerowania przydatnego ProvideValue(IServiceProvider) wyniku, powinny zgłaszać wyjątki, jeśli ta usługa nie jest dostępna. Zalecanym wyjątkiem do zgłoszenia jest InvalidOperationException.
Implementacja może również zgłaszać wyjątki, jeśli jeden z argumentów, których wymaga rozszerzenie znaczników niestandardowych w celu zapewnienia wartości null, jest nieprawidłowe dla jego typu danych lub nie zawiera wartości, którą rozszerzenie znaczników może przetwarzać. Zalecanym wyjątkiem do zgłoszenia jest InvalidOperationException.