2011-07-05 6 views

Odpowiedz

6

TypeConverters są wykorzystywane do niejawnie przekonwertować jednego typu na inny. Na przykład model BrushConverter może przekształcić ciąg "Czerwony" w obiekt SolidColorBrush, którego właściwość Kolor jest ustawiona na czerwony. Tak jak w tym przypadku:

<Button Background="Red" /> 

MarkupExtension pozwala na dostarczanie bardziej dostosowanych wartości do właściwości. Istnieje również kilka specjalnych rozszerzeń znaczników, bindowanie, wiązanie MultiBinding i DynamicResource. Nie tylko zapewniają one wartość statyczną, ale zapewniają bardziej dynamiczną wartość.

Można więc tworzyć rozszerzenia znaczników, które wykonują te same operacje, co konwertery typów, ale trzeba je jawnie używać, w przeciwieństwie do niejawnego charakteru konwerterów typów.

1

A TypeConverter jest przeznaczony do konwersji z jednego rodzaju na inny. Jest kilka dostępnych z pudełka, takich jak BrushConverter, ColorConverter, BooleanConverter i tak dalej. Zobacz here, aby uzyskać pełną listę. Co to jest wielki temat konwerterów typu jest to, że mogą one być stosowane do definicji rzeczowych stosując następującą definicję atttribute w definicji klasy ...

[TypeConverterAttribute(typeof(BrushConverter)] 
public Brush Background 
{ 
    ... 
} 

... realizacja BrushConverter wie, że jeśli odbiera łańcuch jako dane wejściowe, powinien spróbować przekonwertować go do znanej instancji SolidBrush koloru. Oznacza to, że XAML nie należy przypisać rzeczywistą SolidBrushes.Red odniesienie do własności, ale zamiast użyć prostego ciąg ...

<Button Background="Red" /> 

... to znacznie szybciej pisać i zrozumieć. Jednak TypeConverter jest ZAWSZE wymagane do przypisania własności i nie można zapobiec wywołaniu przez XAML wywołania TypeConvertera.

A MarkupExtension służy do zwracania obiektu, który jest następnie przypisany do określonej właściwości. Jest to bardziej elastyczne, ponieważ możesz zdecydować kiedy i gdzie użyć rozszerzenia MarkupExtension i nie jesteś ograniczony do konkretnych właściwości, które zostały wcześniej oznaczone atrybutem. Przykłady rozszerzeń znaczników to Binding, StaticResource i DynamicResource.

Tak więc konwerter typów doskonale nadaje się do określonych właściwości określonego typu, które mają akceptować większy zakres wartości niż definiuje sam typ. Rozszerzenie znaczników doskonale nadaje się do bardziej ogólnego zastosowania, gdy deweloper decyduje, kiedy i gdzie go używać:

Powiązane problemy