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, który jest udostępniany 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 do ustawienia we właściwości, w której jest stosowane 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 na 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 dotyczące użycia platformy WPF
Ważna
Klasy WPF, które mają określone interakcje z operacjami zestawu znaczników, nie powinny polegać na IReceiveMarkupExtension implementacji programu .NET Framework 4. Zamiast tego użyj XamlSetMarkupExtensionAttributewywołań zwrotnych atrybutów -attributed.
Notatki dotyczące implementowania
Typowe usługi zwracane przez domyślnego dostawcę usług, który jest zazwyczaj dostępny dla niestandardowej lub istniejącej MarkupExtension implementacji, obejmują następujące usługi podstawowe.
IProvideValueTarget raportuje 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 z ogólnym zachowaniem zapisywania obiektów XAML, które może zapewnić wartość opartą Type na nazwie typu XAML. Nazwa może opcjonalnie zawierać prefiks dla zamapowanej przestrzeni nazw XAML.
IXamlSchemaContextProvider uwidacznia aktywny kontekst schematu XAML bezpośrednio. W raporcie XamlSchemaContextmożna uzyskać informacje o kontekście schematu XAML, takie jak sposób mapowania zestawów pod kątem obsługi typów, preferowany prefiks w zestawach, listy każdego XamlType w zestawie itd.
Inne usługi dostępne dla bardziej wyspecjalizowanych scenariuszy rozszerzeń znaczników obejmują:
Potencjalnie implementacje ProvideValue(IServiceProvider) programu mogą ignorować serviceProvider parametr . Jest to możliwe w przypadku niektórych podstawowych scenariuszy, w których do zwracania wartości nie jest wymagany żaden kontekst.
W typowym użyciu usługi XAML programu .NET Framework i zaimplementowanych składników zapisywania obiektów XAML zapewni dostawcę usług wszystkim metodom konwertera wartości wywoływanym 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 w kontekście 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 niestandardowego znaczników 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.