RelativeSource Classe

Definição

Implementa uma extensão de marcação que descreve a localização da fonte de ligação em relação à posição do alvo de ligação.

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
Herança
RelativeSource
Atributos
Implementações

Exemplos

O exemplo seguinte mostra um disparador de estilo que cria uma ToolTip e que reporta uma mensagem de erro de validação. Usando esta RelativeSource propriedade, o valor do setter liga-se ao conteúdo de erro da corrente TextBox (o TextBox usando o estilo). Para mais informações sobre este exemplo, veja Como: Implementar a Validação de Vinculação.

<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>

O exemplo seguinte mostra a Style definição de um controlo personalizado chamado NumericUpDown. A Text propriedade do TextBlock está ligada ao Value do objeto que é o TemplatedParent, que é o controlo NumericUpDown a que isto Style é aplicado neste 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>

O seguinte devolve o segundo ItemsControl encontrado no caminho ascendente começando no elemento alvo da ligação.

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)

Observações

Uma das formas de especificar uma fonte de ligação é usar a Binding.RelativeSource propriedade. Este é o tipo de propriedade dessa propriedade. RelativeSource é simultaneamente uma implementação de extensão de marcação e um objeto de dados. Quando a extensão retorna a si própria (ver ProvideValue), a informação relevante está contida nos dados. O principal objetivo da extensão de marcação é permitir uma sintaxe construtora de argumentos variáveis em forma de atributo, de modo que o FindAncestor modo possa ser definido em linha com os dois argumentos extra para o tipo e nível do ancestral que os outros modos não requerem.

Para informações sobre XAML, consulte RelativeSource MarkupExtension.

Construtores

Name Description
RelativeSource()

Inicializa uma nova instância da RelativeSource classe.

RelativeSource(RelativeSourceMode, Type, Int32)

Inicializa uma nova instância da RelativeSource classe com um modo inicial e qualificadores adicionais de caminhada na árvore para encontrar a fonte relativa desejada.

RelativeSource(RelativeSourceMode)

Inicializa uma nova instância da RelativeSource classe com um modo inicial.

Propriedades

Name Description
AncestorLevel

Obtém ou define o nível do ancestral a procurar, no FindAncestor modo. Use o 1 para indicar o que está mais próximo do elemento alvo de ligação.

AncestorType

Obtém ou define o tipo de antepassado a procurar.

Mode

Obtém ou define um RelativeSourceMode valor que descreve a localização da fonte de ligação em relação à posição do alvo de ligação.

PreviousData

Obtém um valor estático que é usado para devolver um RelativeSource construído para o PreviousData modo.

Self

Obtém um valor estático que é usado para devolver um RelativeSource construído para o Self modo.

TemplatedParent

Obtém um valor estático que é usado para devolver um RelativeSource construído para o TemplatedParent modo.

Métodos

Name Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ProvideValue(IServiceProvider)

Devolve um objeto que deve ser definido como valor na propriedade do objeto alvo para esta extensão de marcação. Para RelativeSource, isto é outro RelativeSource, usando a fonte apropriada para o modo especificado.

ShouldSerializeAncestorLevel()

Indica se a AncestorLevel propriedade deve ser mantida.

ShouldSerializeAncestorType()

Indica se a AncestorType propriedade deve ser mantida.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Implementações de Interface Explícita

Name Description
ISupportInitialize.BeginInit()

Este membro suporta a infraestrutura Windows Presentation Foundation (WPF) e não foi concebido para ser usado diretamente a partir do seu código.

ISupportInitialize.EndInit()

Este membro suporta a infraestrutura Windows Presentation Foundation (WPF) e não foi concebido para ser usado diretamente a partir do seu código.

Aplica-se a

Ver também