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使用此属性,setter 的值绑定到当前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 的自定义控件的定义。 属性Text绑定到Value对象的属性,该对象TemplatedParentNumericUpDown在此示例中应用的控件StyleTextBlock

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

用初始模式初始化 RelativeSource 类的一个新实例。

RelativeSource(RelativeSourceMode, Type, Int32)

用初始模式以及其他用于查找所需相对源的树遍历限定符初始化 RelativeSource 类的一个新实例。

属性

AncestorLevel

FindAncestor 模式获取或设置要查找的上级级别。 使用 1 指示最靠近绑定目标元素的项。

AncestorType

获取或设置要查找的上级节点的类型。

Mode

获取或设置 RelativeSourceMode 值,该值描述相对于绑定目标的位置的绑定源的位置。

PreviousData

获取一个静态值,该值用于返回为 RelativeSource 模式构造的 PreviousData

Self

获取一个静态值,该值用于返回为 RelativeSource 模式构造的 Self

TemplatedParent

获取一个静态值,该值用于返回为 RelativeSource 模式构造的 TemplatedParent

方法

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) 基础结构,不打算直接从代码使用。

适用于

另请参阅