Binding.RelativeSource Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta l'origine di associazione specificandone il percorso in relazione alla posizione della destinazione del binding. Viene usata più spesso nei binding all'interno dei modelli di controllo XAML.
RelativeSource RelativeSource();
void RelativeSource(RelativeSource value);
public RelativeSource RelativeSource { get; set; }
var relativeSource = binding.relativeSource;
binding.relativeSource = relativeSource;
Public Property RelativeSource As RelativeSource
<Binding RelativeSource="{RelativeSource TemplatedParent}"/>
-or-
<Binding RelativeSource="{RelativeSource Self}"/>
Valore della proprietà
Percorso relativo dell'origine di associazione da utilizzare. Il valore predefinito è Null.
Esempio
Questo esempio XAML è tratto dal file generic.xaml che definisce gli stati di visualizzazione predefiniti per tutti i controlli XAML. Questo particolare segmento è uno degli stati di visualizzazione per il controllo ToggleSwitch . In questo caso, una delle animazioni definite dallo stato di visualizzazione fa riferimento alle proprietà del controllo esistenti in modo che i modelli possano accedervi e ottenere valori di runtime che modificano l'animazione. Affinché il codice XAML del modello ottiene le proprietà dal controllo in cui viene applicato il modello, l'associazione deve usare {RelativeSource TemplatedParent}
come valore RelativeSource.
<VisualStateGroup x:Name="ToggleStates">
<VisualStateGroup.Transitions>
<VisualTransition x:Name="DraggingToOnTransition"
From="Dragging"
To="On"
GeneratedDuration="0">
<Storyboard>
<RepositionThemeAnimation TargetName="SwitchKnob"
FromHorizontalOffset="
{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.KnobCurrentToOnOffset}"
/>
<RepositionThemeAnimation TargetName="SwitchCurtain"
FromHorizontalOffset="
{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CurtainCurrentToOnOffset}"
/>
</Storyboard>
</VisualTransition>
...
</VisualStateGroup.Transitions>
</VisualStateGroup>
Commenti
Source, RelativeSource e ElementName si escludono a vicenda in un'associazione. Se hai impostato uno di questi attributi, l'impostazione di uno degli altri due in un'associazione (tramite XAML o tramite codice) genererà un'eccezione. L'impostazione di RelativeSource in XAML richiede sempre l'uso dell'estensione di markup {RelativeSource}. Ciò vale anche se si sta creando l'intera associazione come estensione di markup {Binding}, nel qual caso l'estensione di markup {RelativeSource} è annidata all'interno del componente RelativeSource dell'espressione.
Non è possibile impostare i valori delle proprietà di un oggetto Binding dopo che tale associazione è stata associata a un elemento di destinazione e a una proprietà di destinazione. Se si tenta di ottenere un'eccezione in fase di esecuzione.