Binding.RelativeSource 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通过指定绑定源相对于绑定目标位置的位置,获取或设置此绑定源。 这在 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 对象的属性值。 如果尝试此操作,将收到运行时异常。