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 の例は、すべての XAML コントロールの既定のビジュアル状態を定義する generic.xaml ファイルから取得したものです。 この特定のセグメントは、 ToggleSwitch コントロールの表示状態の 1 つです。 ここでは、ビジュアル状態によって定義されたアニメーションの 1 つは、テンプレートがそれらにアクセスし、アニメーションを変更する実行時の値を取得できるように、具体的に存在するコントロールのプロパティを参照します。 テンプレート XAML がテンプレートが適用されているコントロールからプロパティを取得するには、バインドで RelativeSource 値として を使用 {RelativeSource TemplatedParent} する必要があります。

<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 は、バインド内で相互に排他的です。 これらの属性の 1 つを設定した場合、バインディング内の他の 2 つ (XAML またはコード経由) のいずれかを設定すると、例外が発生します。 XAML で RelativeSource を設定するには、常に {RelativeSource} マークアップ拡張機能を使用する必要があります。 これは、バインド全体を {Binding} マークアップ拡張として作成する場合にも当てはまります。この場合、 {RelativeSource} マークアップ拡張機能 は式の RelativeSource コンポーネント内に入れ子になります。

Binding オブジェクトのプロパティ値は、そのバインドがターゲット要素とターゲット プロパティにアタッチされた後は設定できません。 これを試みると、実行時例外が発生します。

適用対象

こちらもご覧ください