Typy konwerterów i rozszerzenia znaczników dla XAML
Konwertery typów i rozszerzenia znaczników to dwie techniki używane przez systemy typów XAML i składniki zapisywania XAML do generowania składników grafu obiektów. Chociaż mają one pewne cechy, konwertery typów i rozszerzenia znaczników są reprezentowane inaczej w strumieniu węzła XAML. W tym zestawie dokumentacji konwertery typów, rozszerzenia znaczników i podobne konstrukcje są czasami określane zbiorczo jako konwertery wartości.
Konwertery wartości
W języku XAML konwertery wartości są używane w różnych scenariuszach. Na poniższej liście przedstawiono różne typy konwerterów wartości w języku XAML:
Konwerter typów
Rozszerzenie znaczników
Serializator wartości
Powiązana klasa lub klasa pomocy technicznej, która udostępnia logikę składni tekstu XAML
Konwertery typów
W definicji usług XAML platformy .NET konwertery typów są klasami pochodzącymi z klasy CLR TypeConverter . TypeConverter jest klasą, która znajdowała się na platformie .NET przed utworzeniem kodu XAML. Jego pierwotnym celem było wsparcie okien właściwości i podobnych metafor edycji opartych na tekście dla właściwości IDE. Wprowadzenie kodu XAML do platformy .NET używa TypeConverter do konwertowania składni tekstowej (jak znaleziono w węźle wartości atrybutu lub wartości XAML) na obiekt. TypeConverter można również użyć do serializacji wartości obiektu do składni tekstowej. TypeConverter był również używany w poprzednich implementacjach XAML specyficznych dla platformy w programach Windows Presentation Foundation (WPF) i Windows Communication Foundation (WCF). Aby uzyskać więcej informacji na temat języka TypeConverter XAML, zobacz Konwertery typów dla języka XAML — omówienie.
Rozszerzenia struktury znaczników
W implementacji usług XAML platformy .NET rozszerzenia znaczników to klasy pochodzące z MarkupExtension klasy. Rozszerzenia znaczników to pojęcie, które w tym formularzu pochodzi z języka XAML. Rozszerzenie znaczników można traktować jako coś takiego jak rozszerzalna sekwencja ucieczki, która wywołuje klasę usługi w celu zapewnienia jej logiki. Jeśli chodzi o znaczniki, procesory XAML powszechnie rozpoznają rozszerzenie znaczników przez sekwencję tekstu, która rozpoczyna się od otwierającego nawiasu klamrowego ({) w ciągu tekstowym.
Rozszerzenia znaczników różnią się od konwerterów typów. Konwertery typów są zwykle skojarzone z typami lub elementami członkowskimi. Są one wywoływane, gdy tworzenie grafu obiektu lub serializacja napotyka składnię tekstu skojarzoną z tymi jednostkami.
Rozszerzenia znaczników są skojarzone z jedną klasą usługi pomocniczej, ale można je zastosować dla dowolnej wartości składowej. (Można jednak zaimplementować rozszerzenie znaczników, aby celowo ograniczyć jego użycie do niektórych elementów członkowskich lub typów docelowych przy użyciu kontekstu usługi). Rozszerzenia znaczników mogą zastąpić skojarzenie konwertera typów. Można też użyć ich do określenia wartości atrybutu dla elementów członkowskich, które w przeciwnym razie nie obsługują składni tekstu.
Aby uzyskać więcej informacji na temat wzorca implementacji rozszerzenia znaczników dla języka XAML, zobacz Markup Extensions for XAML Overview (Rozszerzenia znaczników dla języka XAML — omówienie).
Serializatory wartości
A ValueSerializer to wyspecjalizowany konwerter typów zoptymalizowany pod kątem konwertowania obiektu na ciąg. Wartość A ValueSerializer dla języka XAML może w ogóle nie implementować ConvertFrom
metody. Implementacja ValueSerializer uzyskuje usługi w sposób podobny do TypeConverter implementacji. Metody wirtualne zapewniają parametr wejściowy context
. Parametr context
jest typu IValueSerializerContext, który dziedziczy z interfejsu IServiceProvider i ma metodę GetService .
W systemie typów XAML i w implementacjach modułów zapisywania XAML, które używają przetwarzania pętli węzłów XAML do serializacji, konwerter wartości skojarzony z typem lub elementem członkowskim jest zgłaszany przez własną XamlType.ValueSerializer właściwość. Znaczenie dla składników zapisywania XAML, które wykonują serializacji, jest to, że jeśli element XamlType.TypeConverter i XamlType.ValueSerializer istnieje, konwerter typów powinien być używany dla ścieżki ładowania, a serializator wartości powinien być używany dla ścieżki zapisywania. Jeśli XamlType.TypeConverter istnieje, ale XamlType.ValueSerializer ma null
wartość , konwerter typów jest również używany dla ścieżki zapisu.
Inne konwertery wartości
Konwerter wartości jest rozszerzalny poza określone wzorce konwertera typów lub rozszerzenia znaczników. Jednak to dostosowanie wymagałoby również ponownego definiowania systemu typów XAML udostępnianego przez usługi XAML platformy .NET. Istniejący system typów XAML ma reprezentacje i systemy raportowania dla konwerterów typów, rozszerzeń znaczników i serializacji wartości, ale nie w przypadku niestandardowych form konwersji wartości. Jeśli chcesz utworzyć niestandardowe konwertery wartości, użyj XamlValueConverter<TConverterBase> typu .
Konwertery typów i rozszerzenia znaczników w kombinacji
Rozszerzenia znaczników i konwertery typów są używane w różnych sytuacjach w języku XAML. Chociaż kontekst jest dostępny w przypadku użycia rozszerzeń znaczników, zachowanie konwersji typów właściwości, w których rozszerzenie znaczników zapewnia wartość, zazwyczaj nie jest sprawdzane w implementacjach rozszerzeń znaczników. Innymi słowy, nawet jeśli rozszerzenie znaczników zwraca ciąg tekstowy jako jego ProvideValue
dane wyjściowe, zachowanie konwersji typów w tym ciągu, jak zastosowano do określonej właściwości lub typu wartości właściwości, nie jest wywoływane. Ogólnie rzecz biorąc, celem rozszerzenia znaczników jest przetwarzanie ciągu i zwracanie obiektu bez żadnego konwertera typów.
Kontekst usługi dla konwertera wartości
Podczas implementowania konwertera wartości często potrzebny jest dostęp do kontekstu, w którym jest stosowany konwerter wartości. Ten kontekst jest nazywany kontekstem usługi. Kontekst usługi może zawierać informacje, takie jak aktywny kontekst schematu XAML, dostęp do systemu mapowania typów, który zapewnia kontekst schematu XAML i składnik zapisywania obiektów XAML itd. Aby uzyskać więcej informacji na temat kontekstów usługi dostępnych dla konwertera wartości i sposobu uzyskiwania dostępu do usług, które może zapewnić kontekst usługi, zobacz Konteksty usług dostępne dla konwerterów typów i rozszerzeń znaczników.
Zobacz też
.NET Desktop feedback