Поделиться через


RelativeSource Класс

Определение

Реализует расширение разметки, описывающее расположение источника привязки относительно положения целевого объекта привязки.

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
Наследование
RelativeSource
Атрибуты
Реализации

Примеры

В следующем примере показан триггер стиля, который создает ToolTip сообщение об ошибке проверки. RelativeSource Используя свойство, значение метода задания привязывается к содержимому ошибки текущего TextBox (TextBoxиспользуемого стиля). Дополнительные сведения об этом примере см. в статье "Практическое руководство. Реализация проверки привязки".

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

В следующем примере показано Style определение пользовательского элемента управления NumericUpDown. Свойство TextTextBlock объекта привязано к Value объекту, TemplatedParentкоторый является NumericUpDown элементом управления, Style к которому применяется в данном случае.

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

Ниже возвращается второе ItemsControl , обнаруженное на восходящем пути, начиная с целевого элемента привязки.

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)

Комментарии

Одним из способов указать источник привязки является использование Binding.RelativeSource свойства. Это тип свойства этого свойства. RelativeSource одновременно является реализацией расширения разметки и объектом данных. Когда расширение возвращается (см ProvideValue.), соответствующие сведения содержатся в данных. Основной целью расширения разметки является разрешение синтаксиса конструктора переменной аргумента в форме атрибута, чтобы FindAncestor режим можно было определить в соответствии с двумя дополнительными аргументами типа предка и уровня, которые другие режимы не требуют.

Сведения о XAML см. в разделе RelativeSource MarkupExtension.

Конструкторы

Имя Описание
RelativeSource()

Инициализирует новый экземпляр класса RelativeSource.

RelativeSource(RelativeSourceMode, Type, Int32)

Инициализирует новый экземпляр RelativeSource класса с начальным режимом и дополнительными квалификаторами для поиска требуемого относительного источника.

RelativeSource(RelativeSourceMode)

Инициализирует новый экземпляр RelativeSource класса с помощью начального режима.

Свойства

Имя Описание
AncestorLevel

Возвращает или задает уровень предка для поиска в FindAncestor режиме. Используйте 1, чтобы указать ближайший к целевому элементу привязки.

AncestorType

Возвращает или задает тип предка для поиска.

Mode

Возвращает или задает RelativeSourceMode значение, описывающее расположение источника привязки относительно положения целевого объекта привязки.

PreviousData

Возвращает статическое значение, используемое для возврата созданного RelativeSourcePreviousData для режима.

Self

Возвращает статическое значение, используемое для возврата созданного RelativeSourceSelf для режима.

TemplatedParent

Возвращает статическое значение, используемое для возврата созданного RelativeSourceTemplatedParent для режима.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ProvideValue(IServiceProvider)

Возвращает объект, который должен быть задан в качестве значения свойства целевого объекта для этого расширения разметки. Для RelativeSourceэтого используется другой RelativeSourceисточник для указанного режима.

ShouldSerializeAncestorLevel()

Указывает, следует ли AncestorLevel сохранять свойство.

ShouldSerializeAncestorType()

Указывает, следует ли AncestorType сохранять свойство.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

Имя Описание
ISupportInitialize.BeginInit()

Этот член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода.

ISupportInitialize.EndInit()

Этот член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода.

Применяется к

См. также раздел