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.
Specifica le proprietà di un'origine RelativeSource associativa, da utilizzare all'interno di un'estensione di markup di associazione, o quando si imposta la proprietà di un elemento RelativeSource stabilito in XAML.
Utilizzo degli attributi XAML
<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />
Utilizzo degli attributi XAML (annidato all'interno dell'estensione Binding)
<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" ... />
Utilizzo dell'elemento oggetto XAML
<Binding>
<Binding.RelativeSource>
<RelativeSource Mode="modeEnumValue"/>
</Binding.RelativeSource>
</Binding>
oppure
<Binding>
<Binding.RelativeSource>
<RelativeSource
Mode="FindAncestor"
AncestorType="{x:Type typeName}"
AncestorLevel="intLevel"
/>
</Binding.RelativeSource>
</Binding>
Valori XAML
| Valore | Descrizione |
|---|---|
modeEnumValue |
Uno dei seguenti: - La stringa token Self corrisponde a un RelativeSource creato con la sua proprietà Mode impostata su Self.- La stringa token TemplatedParent corrisponde a un RelativeSource creato con la sua proprietà Mode impostata su TemplatedParent.- La stringa token PreviousData corrisponde a un RelativeSource creato con la sua proprietà Mode impostata su PreviousData.- Consultare di seguito per informazioni sulla modalità FindAncestor. |
FindAncestor |
Il token stringa FindAncestor. L'uso di questo token entra in una modalità in cui un RelativeSource specifica un tipo predecessore e facoltativamente un livello predecessore. Corrisponde a un oggetto RelativeSource creato con la relativa Mode proprietà impostata su FindAncestor. |
typeName |
Obbligatorio per la modalità FindAncestor Il nome di un tipo, che riempie la proprietà AncestorType. |
intLevel |
Facoltativo per FindAncestor modalità. Livello antenato (valutato verso la direzione del nodo genitore nell'albero logico). |
Osservazioni:
{RelativeSource TemplatedParent} Gli utilizzi di binding sono una tecnica chiave che punta a un concetto più ampio della separazione dell'interfaccia utente di un controllo e della logica di un controllo. In questo modo è possibile eseguire il binding dall'interno della definizione del modello al genitore modellato (istanza dell'oggetto in fase di esecuzione in cui viene applicato il modello). In questo caso, l'estensione di markup TemplateBinding è in effetti una abbreviata per l'espressione di associazione seguente: {Binding RelativeSource={RelativeSource TemplatedParent}}.
TemplateBinding o {RelativeSource TemplatedParent} gli utilizzi sono entrambi rilevanti solo all'interno del codice XAML che definisce un modello. Per altre informazioni, vedere Estensione di markup TemplateBinding.
{RelativeSource FindAncestor} viene usato principalmente nei modelli di controllo o nelle composizioni dell'interfaccia utente prevedibili, per i casi in cui un controllo deve sempre trovarsi in una struttura ad albero visuale di un determinato tipo predecessore. Ad esempio, gli elementi di un controllo elementi potrebbero usare FindAncestor gli utilizzi per l'associazione alle proprietà del predecessore padre del controllo elementi. In alternativa, gli elementi che fanno parte della composizione dei controlli in un modello possono usare FindAncestor legami agli elementi parent nella stessa struttura di composizione.
Nella sintassi dell'elemento oggetto per la modalità FindAncestor, illustrata nelle sezioni Sintassi XAML, la seconda sintassi dell'elemento oggetto viene usata in modo specifico per la modalità FindAncestor.
FindAncestor mode richiede un AncestorType valore. È necessario impostare AncestorType come attributo usando un riferimento x:Type Markup Extension al tipo di predecessore da cercare. Il AncestorType valore viene usato quando la richiesta di associazione viene elaborata in fase di esecuzione.
Per la modalità FindAncestor, la proprietà facoltativa AncestorLevel può aiutare a disambiguare la ricerca degli antenati nei casi in cui è possibile che esista più di un antenato di quel tipo nell'albero degli elementi.
Per altre informazioni su come usare la FindAncestor modalità , vedere RelativeSource.
{RelativeSource Self} è utile per gli scenari in cui una proprietà di un'istanza deve dipendere dal valore di un'altra proprietà della stessa istanza e non esiste già alcuna relazione di proprietà di dipendenza generale (ad esempio la coercizione) tra queste due proprietà. Anche se è raro che due proprietà esistano in un oggetto in modo che i valori siano letteralmente identici (e sono tipizzati in modo identico), è anche possibile applicare un Converter parametro a un'associazione con {RelativeSource Self}e usare il convertitore per convertire tra tipi di origine e di destinazione. Un altro scenario per {RelativeSource Self} è come parte di un oggetto MultiDataTrigger.
Ad esempio, il codice XAML seguente definisce un Rectangle elemento in modo che, indipendentemente dal valore immesso per Width, è Rectangle sempre un quadrato: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>
{RelativeSource PreviousData} è utile nei modelli di dati o nei casi in cui le associazioni usano una raccolta come origine dati. È possibile usare {RelativeSource PreviousData} per evidenziare le relazioni tra elementi di dati adiacenti nella raccolta. Una tecnica correlata consiste nel stabilire un oggetto MultiBinding tra gli elementi correnti e precedenti nell'origine dati e usare un convertitore su tale associazione per determinare la differenza tra i due elementi e le relative proprietà.
Nell'esempio seguente, il primo TextBlock nel modello di elementi visualizza il numero corrente. Il secondo TextBlock vincolo è un MultiBinding che nominalmente ha due Binding elementi: il record attuale e un vincolo che utilizza deliberatamente il record di dati precedente servendosi di {RelativeSource PreviousData}. Quindi, un convertitore sull'oggetto MultiBinding calcola la differenza e restituisce il risultato all'associazione.
<ListBox Name="fibolist">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"/>
<TextBlock>, difference = </TextBlock>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DiffConverter}">
<Binding/>
<Binding RelativeSource="{RelativeSource PreviousData}"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
La descrizione del data binding come concetto non è descritta qui, vedere Panoramica del data binding.
Nell'implementazione del processore XAML WPF la gestione per questa estensione di markup è definita dalla classe RelativeSource.
RelativeSource è 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 dell'attributo, ovvero la convenzione in base alla quale un processore XAML riconosce che un'estensione di markup deve elaborare l'attributo. Per ulteriori informazioni, consultare Markup Extensions e WPF XAML.
Vedere anche
.NET Desktop feedback