Partilhar via


RelativeSource Classe

Definição

Implementa uma extensão de marcação que descreve o local da origem da associação em relação à posição do destino de associaçã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 a seguir mostra um gatilho de estilo que cria um ToolTip que relata uma mensagem de erro de validação. Usando a RelativeSource propriedade, o valor do setter se associa ao conteúdo de erro da corrente TextBox (usando TextBox o estilo). Para obter mais informações sobre este exemplo, consulte Como implementar a validação de associaçã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 a seguir mostra a Style definição de um controle personalizado chamado NumericUpDown. A Text propriedade do TextBlock é associada ao Value objeto que é o TemplatedParent, que é o NumericUpDown controle ao qual isso 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 retorna o segundo ItemsControl encontrado no caminho para cima, começando no elemento de destino da associaçã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)

Comentários

Uma das maneiras de especificar uma fonte de associação é usar a Binding.RelativeSource propriedade. Esse é 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 mesma (veja ProvideValue), as informações relevantes são contidas nos dados. A principal finalidade da extensão de marcação é permitir uma sintaxe de construtor de argumento variável no formato de atributo, de modo que o FindAncestor modo possa ser definido embutido com os dois argumentos extras para o tipo ancestral e o nível que os outros modos não exigem.

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

Construtores

Nome Description
RelativeSource()

Inicializa uma nova instância da classe RelativeSource.

RelativeSource(RelativeSourceMode, Type, Int32)

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

RelativeSource(RelativeSourceMode)

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

Propriedades

Nome Description
AncestorLevel

Obtém ou define o nível de ancestral a ser buscado, no FindAncestor modo. Use 1 para indicar o mais próximo do elemento de destino de associação.

AncestorType

Obtém ou define o tipo de ancestral a ser buscado.

Mode

Obtém ou define um RelativeSourceMode valor que descreve o local da origem da associação em relação à posição do destino de associação.

PreviousData

Obtém um valor estático usado para retornar um RelativeSource constructo para o PreviousData modo.

Self

Obtém um valor estático usado para retornar um RelativeSource constructo para o Self modo.

TemplatedParent

Obtém um valor estático usado para retornar um RelativeSource constructo para o TemplatedParent modo.

Métodos

Nome Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ProvideValue(IServiceProvider)

Retorna um objeto que deve ser definido como o valor na propriedade do objeto de destino para essa extensão de marcação. Para RelativeSource, este é outro RelativeSource, usando a origem apropriada para o modo especificado.

ShouldSerializeAncestorLevel()

Indica se a AncestorLevel propriedade deve ser mantida.

ShouldSerializeAncestorType()

Indica se a AncestorType propriedade deve ser mantida.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
ISupportInitialize.BeginInit()

Esse membro dá suporte à infraestrutura do WPF (Windows Presentation Foundation) e não se destina a ser usado diretamente do seu código.

ISupportInitialize.EndInit()

Esse membro dá suporte à infraestrutura do WPF (Windows Presentation Foundation) e não se destina a ser usado diretamente do seu código.

Aplica-se a

Confira também