wpf
Estensioni markup
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>