Binding.RelativeSource 属性

定义

通过指定绑定源相对于绑定目标位置的位置,获取或设置此绑定源。 这在 XAML 控件模板内的绑定中最常用。

RelativeSource RelativeSource();

void RelativeSource(RelativeSource value);
public RelativeSource RelativeSource { get; set; }
var relativeSource = binding.relativeSource;
binding.relativeSource = relativeSource;
Public Property RelativeSource As RelativeSource
<Binding RelativeSource="{RelativeSource TemplatedParent}"/>
-or-
<Binding RelativeSource="{RelativeSource Self}"/>

属性值

要使用的绑定源的相对位置。 默认值为 null

示例

此 XAML 示例取自 generic.xaml 文件,该文件定义所有 XAML 控件的默认视觉状态。 此特定段是 ToggleSwitch 控件的视觉状态之一。 此处,视觉状态定义的动画之一引用控件的属性,这些属性专门存在,以便模板可以访问它们并获取用于修改动画的运行时值。 要使模板 XAML 从应用模板的控件中获取属性,绑定必须使用 {RelativeSource TemplatedParent} 作为 RelativeSource 值。

<VisualStateGroup x:Name="ToggleStates">
  <VisualStateGroup.Transitions>
    <VisualTransition x:Name="DraggingToOnTransition"
      From="Dragging"
      To="On"
      GeneratedDuration="0">
      <Storyboard>
        <RepositionThemeAnimation TargetName="SwitchKnob" 
          FromHorizontalOffset="
          {Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.KnobCurrentToOnOffset}"
        />
        <RepositionThemeAnimation TargetName="SwitchCurtain"
          FromHorizontalOffset="
          {Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CurtainCurrentToOnOffset}"
        />
      </Storyboard>
    </VisualTransition>
...
  </VisualStateGroup.Transitions>
</VisualStateGroup>

注解

Source、RelativeSource 和 ElementName 在绑定中互斥。 如果已设置其中一个属性,则通过 XAML 或通过代码) 在绑定 (中设置其他两个属性中的任何一个都将导致异常。 在 XAML 中设置 RelativeSource 始终需要使用 {RelativeSource} 标记扩展。 如果将整个绑定创建为 {Binding} 标记扩展,则也是如此,在这种情况下, {RelativeSource} 标记扩展 嵌套在表达式的 RelativeSource 组件中。

在绑定已附加到目标元素和目标属性之后,无法设置 Binding 对象的属性值。 如果尝试此操作,将收到运行时异常。

适用于

另请参阅