Ricerca…


Parametri

Metodo Descrizione
ProvideValue La classe MarkupExtension ha un solo metodo che deve essere sovrascritto, il parser XAML utilizza quindi il valore fornito da questo metodo per valutare il risultato dell'estensione di markup.

Osservazioni

È possibile implementare un'estensione di markup per fornire valori per le proprietà in un uso di attributo, proprietà in un utilizzo dell'elemento proprietà o entrambi.

Quando viene utilizzato per fornire un valore di attributo, la sintassi che distingue una sequenza di estensione di markup in un processore XAML è la presenza delle parentesi graffe di apertura e chiusura ({e}). Il tipo di estensione di markup viene quindi identificato dal token di stringa immediatamente successivo alla parentesi graffa di apertura.

Quando utilizzato nella sintassi dell'elemento proprietà, un'estensione di markup è visivamente uguale a qualsiasi altro elemento utilizzato per fornire un valore di elemento di proprietà: una dichiarazione di elemento XAML che fa riferimento alla classe di estensione markup come un elemento, racchiuso tra parentesi angolari (<>).

Per maggiori informazioni visita https://msdn.microsoft.com/en-us/library/ms747254(v=vs.110).aspx

Estensione di markup utilizzata con IValueConverter

Uno dei migliori usi per le estensioni di markup è per un utilizzo più semplice di IValueConverter. Nell'esempio seguente BoolToVisibilityConverter è un convertitore di valori, ma poiché è indipendente dall'istanza, può essere utilizzato senza le normali macro di un convertitore di valori con l'aiuto dell'estensione di markup. Basta usare XAML

Visibility="{Binding [BoolProperty], Converter={[xmlns]:BoolToVisibilityConverter}}"

e puoi impostare la visibilità degli oggetti sul valore di 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;
        }
    }

Estensioni markup XAML definite

Ci sono quattro estensioni markup predefinite in XAML:

x:Type fornisce l'oggetto Type per il tipo denominato. Questa funzione viene utilizzata più frequentemente in stili e modelli.

<object property="{x:Type prefix:typeNameValue}" .../>

x:Static produce valori statici. I valori provengono da entità di codice di tipo valore che non sono direttamente il tipo di valore di una proprietà di destinazione, ma possono essere valutate per quel tipo.

<object property="{x:Static prefix:typeName.staticMemberName}" .../>

x:Null specifica null come valore per una proprietà e può essere utilizzato per attributi o valori di elementi di proprietà.

<object property="{x:Null}" .../>

x:Array fornisce supporto per la creazione di array generali nella sintassi XAML, per i casi in cui il supporto della raccolta fornito dagli elementi di base di WPF e dai modelli di controllo non viene deliberatamente utilizzato.

<x:Array Type="typeName">
  arrayContents
</x:Array>


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow