{RelativeSource} 標記延伸

提供方法,以執行階段物件圖形中的相對關聯性來指定繫結的來源。

XAML 屬性使用方式 (自我模式)

<Binding RelativeSource="{RelativeSource Self}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>

XAML 屬性使用方式 (TemplatedParent 模式)

<Binding RelativeSource="{RelativeSource TemplatedParent}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>

XAML 值

詞彙 描述
{RelativeSource Self} 產生 SelfMode 值。 目標項目應當做這個繫結的來源使用。 這對於將元素的某個屬性繫結至相同元素上的另一個屬性很有用。
{RelativeSource TemplatedParent} 產生一個用做此繫結來源的 ControlTemplate。 這適用於將執行階段資訊套用至範本層級的繫結。

備註

Binding 可以將 Binding.RelativeSource 設定為 Binding 物件元素上的屬性或 {Binding} 標記延伸中的元件。 這就是為什麼顯示兩個不同的 XAML 語法的原因。

RelativeSource 類似於 {Binding} 標記延伸。 它是一種標記延伸,能夠傳回本身的執行個體,並支援基本上將引數傳遞至建構函式的字串型建構。 在此情況下,所傳遞的引數是 Mode 值。

Self 模式適用於將元素的一個屬性繫結至相同元素上的另一個屬性,而且是 ElementName 繫結上的變化,但不需要命名,然後自我參考元素。 如果您將元素的某個屬性繫結至相同元素上的另一個屬性,則屬性必須使用相同的屬性類型,或者也必須在繫結上使用 Converter 來轉換值。 例如,您可以使用 Height 做為 Width 的來源而無需轉換,但您需要一個轉換器才能使用 IsEnabled 做為 Visibility 的來源。

以下是範例。 此 Rectangle 使用 {Binding} 標記延伸,因此其 HeightWidth 始終相等並且呈現為正方形。 只有 Height 設定為固定值。 對於此 Rectangle,其預設 DataContextnull,而不是 this。 因此,若要建立資料來源做為物件本身 (並啟用繫結至其其他屬性),我們會使用 RelativeSource={RelativeSource Self}{Binding} 標記延伸用法中的引數。

<Rectangle
  Fill="Orange" Width="200"
  Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"
/>

RelativeSource={RelativeSource Self} 的另一個用法是將物件的 DataContext 設定為其自身的一種方式。 例如,您可能會在某些 SDK 範例中看到這種技術,其中 Page 類別已使用自訂屬性進行了擴展,該屬性已為其自己的資料繫結提供了現成的檢視模型,例如:<common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

注意RelativeSource 的 XAML 用法僅顯示其預期用途:在 XAML 中設定 Binding.RelativeSource 的值做為繫結運算式的一部分。 理論上,如果設定值為 RelativeSource 的屬性,則可能會使用其他用法。