wpf
Markup-Erweiterungen
Suche…
Parameter
Methode | Beschreibung |
---|---|
ProvideValue | Die MarkupExtension-Klasse hat nur eine Methode, die überschrieben werden sollte. XAML-Parser verwendet dann den von dieser Methode bereitgestellten Wert, um das Ergebnis der Markup-Erweiterung auszuwerten. |
Bemerkungen
Eine Markup-Erweiterung kann implementiert werden, um Werte für Eigenschaften in einer Attributverwendung, Eigenschaften in einer Eigenschaftselementverwendung oder beides bereitzustellen.
Bei der Angabe eines Attributwerts ist die Syntax, die eine Markup-Erweiterungssequenz für einen XAML-Prozessor auszeichnet, das Vorhandensein der öffnenden und schließenden geschweiften Klammern ({und}). Der Typ der Markup-Erweiterung wird dann durch das Zeichenfolge-Token identifiziert, das unmittelbar auf die öffnende geschweifte Klammer folgt.
Bei Verwendung in der Eigenschaftselementsyntax ist eine Markuperweiterung visuell dieselbe wie jedes andere Element, das zum Bereitstellen eines Eigenschaftselementwerts verwendet wird: Eine XAML-Elementdeklaration, die auf die Markuperweiterungsklasse als Element verweist, in spitzen Klammern (<>) eingeschlossen.
Weitere Informationen finden Sie unter https://msdn.microsoft.com/en-us/library/ms747254(v=vs.110).aspx
Markup-Erweiterung, die mit IValueConverter verwendet wird
Eine der besten Anwendungen für Markup-Erweiterungen ist die einfachere Verwendung von IValueConverter. Im folgenden Beispiel ist BoolToVisibilityConverter ein Wertkonverter. Da er jedoch instanzunabhängig ist, kann er ohne die normalen Hashwerte eines Wertkonverters mithilfe der Markup-Erweiterung verwendet werden. In XAML einfach verwenden
Visibility="{Binding [BoolProperty], Converter={[xmlns]:BoolToVisibilityConverter}}"
und Sie können die Elementsichtbarkeit auf den bool-Wert einstellen.
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;
}
}
XAML-definierte Markup-Erweiterungen
Es gibt vier vordefinierte Markup-Erweiterungen in XAML:
x:Type
liefert das Type-Objekt für den genannten Typ. Diese Funktion wird am häufigsten in Stilen und Vorlagen verwendet.
<object property="{x:Type prefix:typeNameValue}" .../>
x:Static
erzeugt statische Werte. Die Werte stammen von Werttyp-Code-Entitäten, die nicht direkt dem Wert des Zielwerts entsprechen, sondern für diesen Typ ausgewertet werden können.
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
x:Null
gibt null als Wert für eine Eigenschaft an und kann entweder für Attribute oder Eigenschaftselementwerte verwendet werden.
<object property="{x:Null}" .../>
x:Array
bietet Unterstützung für die Erstellung allgemeiner Arrays in XAML-Syntax für Fälle, in denen die von WPF-Basiselementen und Kontrollmodellen bereitgestellte Sammlungsunterstützung absichtlich nicht verwendet wird.
<x:Array Type="typeName">
arrayContents
</x:Array>