Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Collega il valore di una proprietà in un modello di controllo al valore di un'altra proprietà esposta nel controllo basato su modelli. TemplateBinding può essere usato solo all'interno di una ControlTemplate definizione in XAML.
Utilizzo degli attributi XAML
<object propertyName="{TemplateBinding sourceProperty}" .../>
Utilizzo degli attributi XAML (per la proprietà Setter nel modello o nello stile)
<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>
Valori XAML
Termine | Descrizione |
---|---|
Nome della Proprietà | Nome della proprietà impostata nella sintassi del setter. Deve trattarsi di una proprietà di dipendenza. |
proprietà sorgente | Nome di un'altra proprietà di dipendenza esistente nel tipo che viene modellato. |
Osservazioni:
L'uso di TemplateBinding è una parte fondamentale del modo in cui si definisce un modello di controllo, se si è un autore di controlli personalizzati o se si sostituisce un modello di controllo per i controlli esistenti. Per altre info, vedi Avvio rapido: Modelli di controllo.
È piuttosto comune che propertyName e targetProperty usino lo stesso nome di proprietà. In questo caso, un controllo può definire una proprietà su se stesso e inoltrare la proprietà a una proprietà esistente e denominata in modo intuitivo di una delle sue parti componenti. Ad esempio, un controllo che incorpora un TextBlock nella composizione, usato per visualizzare la proprietà Text del controllo, può includere questo codice XAML come parte del modello di controllo: <TextBlock Text="{TemplateBinding Text}" .... />
I tipi usati come valore per la proprietà di origine e la proprietà di destinazione devono corrispondere. Non è possibile introdurre un convertitore quando si usa TemplateBinding. La mancata corrispondenza dei valori genera un errore durante l'analisi del codice XAML. Se è necessario un convertitore, è possibile usare la sintassi dettagliata per un'associazione di modelli, ad esempio: {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}
Il tentativo di usare un TemplateBinding all'esterno di una definizione ControlTemplate in XAML genererà un errore del parser.
È possibile usare TemplateBinding per i casi in cui anche il valore padre basato su modelli viene posticipato come un'altra associazione. La valutazione per TemplateBinding può attendere fino a quando le associazioni di runtime necessarie hanno valori.
Un TemplateBinding è sempre un'associazione unidirezionale. Entrambe le proprietà coinvolte devono essere proprietà di dipendenza.
TemplateBinding è un'estensione di markup. Le estensioni di markup vengono in genere implementate quando è necessario effettuare l'escape dei valori degli attributi affinché siano diversi dai valori letterali o dai nomi degli handler, e il requisito è più globale rispetto all'utilizzo dei convertitori di tipo su determinati tipi o proprietà. Tutte le estensioni di markup in XAML usano i caratteri "{" e "}" nella sintassi degli attributi, ovvero la convenzione in base alla quale un processore XAML riconosce che un'estensione di markup deve elaborare l'attributo.
Nota Nell'implementazione del processore XAML di Windows Runtime non è disponibile alcuna rappresentazione della classe di backup per TemplateBinding. TemplateBinding è destinato esclusivamente all'uso nel markup XAML. Non esiste un modo semplice per riprodurre il comportamento nel codice.
x:Bind in ControlTemplate
Annotazioni
L'uso di x:Bind in un ControlTemplate richiede Windows 10 versione 1809 (SDK 17763) o versioni successive. Per ulteriori informazioni sulle versioni target, vedere Codice adattivo della versione.
A partire da Windows 10, versione 1809, puoi utilizzare la markup extension x:Bind ovunque tu usi TemplateBinding in un ControlTemplate.
La proprietà TargetType è obbligatoria (non facoltativa) nella ControlTemplate quando si usa x:Bind.
Con il supporto di x:Bind, è possibile usare sia associazioni di funzioni che associazioni bidirezionali in un ControlTemplate.
In questo esempio la proprietà TextBlock.Text restituisce Button.Content.ToString. TargetType in ControlTemplate funge da sorgente dati e ottiene lo stesso risultato di TemplateBinding al padre.
<ControlTemplate TargetType="Button">
<Grid>
<TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
</Grid>
</ControlTemplate>