wpf
Rozszerzenia znaczników
Szukaj…
Parametry
metoda | Opis |
---|---|
ProvideValue | Klasa MarkupExtension ma tylko jedną metodę, którą należy przesłonić, parser XAML używa następnie wartości podanej przez tę metodę do oceny wyniku rozszerzenia znaczników. |
Uwagi
Rozszerzenie znaczników może być zaimplementowane w celu zapewnienia wartości właściwości w użyciu atrybutu, właściwości w użyciu elementu właściwości lub obu tych elementów.
W przypadku podania wartości atrybutu składnia, która odróżnia sekwencję rozszerzenia znaczników od procesora XAML, to obecność nawiasów otwierających i zamykających nawiasów klamrowych ({i}). Rodzaj rozszerzenia znaczników jest następnie identyfikowany przez token łańcucha bezpośrednio po otwierającym nawiasie klamrowym.
W przypadku użycia w składni elementu właściwości rozszerzenie znaczników jest wizualnie takie samo, jak każdy inny element używany do zapewnienia wartości elementu właściwości: deklaracja elementu XAML, która odwołuje się do klasy rozszerzenia znacznika jako elementu, zawarta w nawiasach kątowych (<>).
Aby uzyskać więcej informacji, odwiedź https://msdn.microsoft.com/en-us/library/ms747254(v=vs.110).aspx
Rozszerzenie znaczników używane z IValueConverter
Jednym z najlepszych zastosowań rozszerzeń znaczników jest łatwiejsze użycie IValueConverter. W poniższym przykładzie BoolToVisibilityConverter jest konwerterem wartości, ale ponieważ jest niezależny od instancji, można go używać bez zwykłych kłopotów konwertera wartości za pomocą rozszerzenia znaczników. W XAML wystarczy użyć
Visibility="{Binding [BoolProperty], Converter={[xmlns]:BoolToVisibilityConverter}}"
i możesz ustawić widoczność przedmiotu na wartość bool.
public class BoolToVisibilityConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Visibility)
{
if ((Visibility)value == Visibility.Visible)
return true;
else
return false;
}
else
return false;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
Rozszerzenia znaczników zdefiniowane w XAML
Istnieją cztery predefiniowane rozszerzenia znaczników w XAML:
x:Type
dostarcza obiekt Type dla nazwanego typu. Ta funkcja jest najczęściej używana w stylach i szablonach.
<object property="{x:Type prefix:typeNameValue}" .../>
x:Static
generuje wartości statyczne. Wartości pochodzą od encji kodu typu wartości, które nie są bezpośrednio typem wartości właściwości docelowej, ale mogą być ocenione do tego typu.
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
x:Null
określa null jako wartość właściwości i może być używany albo do atrybutów, albo do wartości elementu właściwości.
<object property="{x:Null}" .../>
x:Array
zapewnia obsługę tworzenia ogólnych tablic w składni XAML, w przypadkach, w których obsługa kolekcji zapewniana przez elementy podstawowe i modele kontrolne WPF nie jest celowo używana.
<x:Array Type="typeName">
arrayContents
</x:Array>