<Binding>
<Binding.RelativeSource>
<RelativeSource
Mode="FindAncestor"
AncestorType="{x:Type typeName}"
AncestorLevel="intLevel"
</Binding.RelativeSource>
</Binding>
XAML 值
modeEnumValue
下列其中之一:
-字串標記 Self
,對應至 RelativeSource 建立的,並將其 Mode 屬性設定為 Self 。
-字串標記 TemplatedParent
,對應至 RelativeSource 建立的,並將其 Mode 屬性設定為 TemplatedParent 。
-字串標記 PreviousData
,對應至 RelativeSource 建立的,並將其 Mode 屬性設定為 PreviousData 。
-請參閱下文以取得模式的相關資訊 FindAncestor
。
FindAncestor
字串語彙基元 FindAncestor
。 使用此語彙基元可進入某個模式,讓 RelativeSource
指定上階類型以及選擇性指定上階層級。 這相當於 RelativeSource 建立時將其 Mode 屬性設為 FindAncestor。
typeName
FindAncestor
模式的必要項。 類型的名稱,可填入 AncestorType 屬性。
intLevel
FindAncestor
模式的選擇項。 上階層級 (朝邏輯樹狀結構的父項目方向評估)。
{RelativeSource TemplatedParent}
系結使用方法是一種重要的技術,可解決控制項的 UI 和控制項邏輯的分隔較大的概念。 這可讓您從樣板定義內繫結到樣板化父代 (套用該樣板的執行階段物件執行個體)。 在此情況下, TemplateBinding 標記延伸 實際上是下列系結運算式的速記: {Binding RelativeSource={RelativeSource TemplatedParent}}
。 TemplateBinding
或 {RelativeSource TemplatedParent}
使用方式都只在定義範本的 XAML 內相關。 如需詳細資訊,請參閱 TemplateBinding 標記延伸。
{RelativeSource FindAncestor}
主要用於控制項範本或可預測的獨立 UI 組合,適用于一律預期控制項在特定上階型別的視覺化樹狀結構中的情況。 例如,項目控制項的項目可能會使用 FindAncestor
使用方法以繫結至其項目控制項父代的屬性。 或者,樣板中屬於控制項組合的項目也可以使用 FindAncestor
繫結至同一個組合結構中的父代項目。
在<XAML 語法>章節內顯示之 FindAncestor
模式的物件項目語法中,第二種物件項目語法特別適用於 FindAncestor
模式。 FindAncestor
模式需要 AncestorType 值。 您必須將X:Type 標記延伸參考設定為要尋找的上階型別,以將其設定 AncestorType 為屬性。 在執行階段處理繫結要求時,會使用 AncestorType 值。
對於 FindAncestor
模式來說,當該類型在項目樹狀結構中可能存在一個以上的上階時,選擇性屬性 AncestorLevel 將有助於釐清上階查閱。
如需關於如何使用 FindAncestor
模式的詳細資訊,請參閱 RelativeSource。
{RelativeSource Self}
適用于實例的某個屬性應該相依于相同實例的另一個屬性值的案例,而且沒有任何一般相依性屬性關聯性 (例如這兩個屬性之間已經存在強制型轉) 。 雖然物件上有兩個屬性很罕見,因此值實際上完全相同 (而且都是相同類型的) ,您也可以將 Converter
參數套用至具有 {RelativeSource Self}
的系結,並使用轉換器在來源與目標型別之間轉換。 的另一個案例 {RelativeSource Self}
是的一部分 MultiDataTrigger 。
例如,下面 XAML 會定義 Rectangle 項目,使得無論為 Width 輸入的值為何,Rectangle 永遠都是正方形:<Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>
{RelativeSource PreviousData}
在資料範本中很有用,或在系結使用集合做為資料來源的情況下很有用。 您可以使用 {RelativeSource PreviousData}
來反白顯示集合中相鄰資料項目之間的關聯性。 還有一個相關的技術,就是在資料來源中的目前和先前項目之間建立 MultiBinding,並在該繫結上使用轉換器來判斷這兩個項目及其屬性之間的不同。
在下面範例中,項目範本中的第一個 TextBlock 會顯示目前的號碼。 第二個 TextBlock 系結是 MultiBinding 名義上有兩個 Binding 要素:目前的記錄,以及刻意使用先前的資料記錄 {RelativeSource PreviousData}
的系結。 然後,MultiBinding 上的轉換器會計算差異,並將它傳回給繫結。
<ListBox Name="fibolist">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"/>
<TextBlock>, difference = </TextBlock>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DiffConverter}">
<Binding/>
<Binding RelativeSource="{RelativeSource PreviousData}"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
此處未涵蓋以概念描述的資料系結,請參閱資料系結 總覽。
在 WPF XAML 處理器執行中,這個標記延伸的處理是由 RelativeSource 類別所定義。
RelativeSource
是一種標記延伸。 如果必須將屬性 (Attribute) 值加上逸出符號,以免成為常值或處理常式名稱,而且這個動作必須更全面地實施 (而不是只對特定類型或屬性 (Property) 設定類型轉換子 (Type Converter)),則通常會實作標記延伸。 XAML 中的 {
所有標記延伸都會在其屬性語法中使用和 }
字元,這是 xaml 處理器辨識標記延伸必須處理屬性的慣例。 如需詳細資訊,請參閱標記延伸和 WPF XAML。
Binding
樣式設定和範本化
WPF 中的 XAML
標記延伸和 WPF XAML
資料系結總覽
繫結宣告概觀
x:Type 標記延伸