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>


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow