Condividi tramite


RelativeSource Classe

Definizione

Implementa un'estensione di markup che descrive la posizione dell'origine dell'associazione rispetto alla posizione della destinazione dell'associazione.

public ref class RelativeSource : System::Windows::Markup::MarkupExtension, System::ComponentModel::ISupportInitialize
[System.Windows.Markup.MarkupExtensionReturnType(typeof(System.Windows.Data.RelativeSource))]
public class RelativeSource : System.Windows.Markup.MarkupExtension, System.ComponentModel.ISupportInitialize
[<System.Windows.Markup.MarkupExtensionReturnType(typeof(System.Windows.Data.RelativeSource))>]
type RelativeSource = class
    inherit MarkupExtension
    interface ISupportInitialize
Public Class RelativeSource
Inherits MarkupExtension
Implements ISupportInitialize
Ereditarietà
RelativeSource
Attributi
Implementazioni

Esempio

Nell'esempio seguente viene illustrato un trigger di stile che crea un oggetto ToolTip che segnala un messaggio di errore di convalida. Utilizzando la RelativeSource proprietà , il valore del setter viene associato al contenuto di errore dell'oggetto corrente TextBox (utilizzando lo TextBox stile ). Per altre informazioni su questo esempio, vedere Procedura: Implementare la convalida dell'associazione.

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors)/ErrorContent}"/>
    </Trigger>
  </Style.Triggers>
</Style>

Nell'esempio seguente viene illustrata la Style definizione di un controllo personalizzato denominato NumericUpDown. La Text proprietà di TextBlock è associata all'oggetto Value dell'oggetto , TemplatedParentovvero il NumericUpDown controllo a cui viene Style applicato in questo caso.

<!--ControlTemplate for NumericUpDown that inherits from
    Control.-->
<Style TargetType="{x:Type local:NumericUpDown}">
  <Setter Property="HorizontalAlignment" Value="Center"/>
  <Setter Property="VerticalAlignment" Value="Center"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type local:NumericUpDown}">
        <Grid Margin="3">
          <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
          </Grid.RowDefinitions>
          <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
          </Grid.ColumnDefinitions>

          <Border BorderThickness="1" BorderBrush="Gray" 
                  Margin="2" Grid.RowSpan="2" 
                  VerticalAlignment="Center" HorizontalAlignment="Stretch">
                  
            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" 
                       Width="60" TextAlignment="Right" Padding="5"/>
          </Border>
          
          <RepeatButton Command="{x:Static local:NumericUpDown.IncreaseCommand}"  
                        Grid.Column="1" Grid.Row="0">Up</RepeatButton>
                        
          <RepeatButton Command="{x:Static local:NumericUpDown.DecreaseCommand}"
                        Grid.Column="1" Grid.Row="1">Down</RepeatButton>

        </Grid>

      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Di seguito viene restituito il secondo ItemsControl rilevato sul percorso verso l'alto a partire dall'elemento di destinazione dell'associazione.

Binding myBinding = new Binding();
// Returns the second ItemsControl encountered on the upward path
// starting at the target element of the binding
myBinding.RelativeSource = new RelativeSource(
    RelativeSourceMode.FindAncestor, typeof(ItemsControl), 2);
Dim myBinding As New Binding()
' Returns the second ItemsControl encountered on the upward path
' starting at the target element of the binding
myBinding.RelativeSource = New RelativeSource(RelativeSourceMode.FindAncestor, GetType(ItemsControl), 2)

Commenti

Uno dei modi per specificare un'origine di associazione consiste nell'usare la Binding.RelativeSource proprietà . Si tratta del tipo di proprietà di tale proprietà. RelativeSource è simultaneamente un'implementazione dell'estensione di markup e un oggetto dati. Quando l'estensione restituisce se stessa (vedere ProvideValue), le informazioni pertinenti sono contenute nei dati. Lo scopo principale dell'estensione di markup è consentire una sintassi del costruttore di argomento variabile in formato attributo, in modo che la FindAncestor modalità possa essere definita inline con i due argomenti aggiuntivi per il tipo predecessore e il livello che le altre modalità non richiedono.

Per informazioni XAML, vedi RelativeSource MarkupExtension.

Costruttori

Nome Descrizione
RelativeSource()

Inizializza una nuova istanza della classe RelativeSource.

RelativeSource(RelativeSourceMode, Type, Int32)

Inizializza una nuova istanza della RelativeSource classe con una modalità iniziale e altri qualificatori a piedi ad albero per trovare l'origine relativa desiderata.

RelativeSource(RelativeSourceMode)

Inizializza una nuova istanza della RelativeSource classe con una modalità iniziale.

Proprietà

Nome Descrizione
AncestorLevel

Ottiene o imposta il livello di predecessore da cercare, in FindAncestor modalità . Usare 1 per indicare quello più vicino all'elemento di destinazione dell'associazione.

AncestorType

Ottiene o imposta il tipo di predecessore da cercare.

Mode

Ottiene o imposta un RelativeSourceMode valore che descrive la posizione dell'origine dell'associazione rispetto alla posizione della destinazione dell'associazione.

PreviousData

Ottiene un valore statico utilizzato per restituire un RelativeSource oggetto costruito per la PreviousData modalità .

Self

Ottiene un valore statico utilizzato per restituire un RelativeSource oggetto costruito per la Self modalità .

TemplatedParent

Ottiene un valore statico utilizzato per restituire un RelativeSource oggetto costruito per la TemplatedParent modalità .

Metodi

Nome Descrizione
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ProvideValue(IServiceProvider)

Restituisce un oggetto che deve essere impostato come valore nella proprietà dell'oggetto di destinazione per questa estensione di markup. Per RelativeSource, si tratta di un altro RelativeSourceoggetto , usando l'origine appropriata per la modalità specificata.

ShouldSerializeAncestorLevel()

Indica se la AncestorLevel proprietà deve essere salvata in modo permanente.

ShouldSerializeAncestorType()

Indica se la AncestorType proprietà deve essere salvata in modo permanente.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
ISupportInitialize.BeginInit()

Questo membro supporta l'infrastruttura di Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice.

ISupportInitialize.EndInit()

Questo membro supporta l'infrastruttura di Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice.

Si applica a

Vedi anche