共用方式為


{TemplateBinding} 標記擴充功能

將控制項範本中屬性的值連結至範本化控制項上其他公開屬性的值。 TemplateBinding 只能在 XAML 的 ControlTemplate 定義內使用。

XAML 屬性使用方式

<object propertyName="{TemplateBinding sourceProperty}" .../>

XAML 屬性使用方式 (適用於範本或樣式中的 Setter 屬性)

<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>

XAML 值

術語 Description
propertyName 在 setter 語法中設定的屬性名稱。 這必須是相依性屬性。
來源屬性 存在於要範本化的類型上的另一個相依性屬性的名稱。

備註

使用TemplateBinding 是定義控制項範本的核心部分,無論您是自訂控制項的作者,或是要替換現有控制項的範本。 如需詳細資訊,請參閱 控制項範本

propertyNametargetProperty 使用相同的屬性名稱相當常見。 在此情況下,控制項可能會在自身上定義一個屬性,並將該屬性轉送至其某個組件中具備直觀名稱的現有屬性。 例如,在其合成中合併 TextBlock 的控制項 (用來顯示控制項自己的 Text 屬性) 可能會將此 XAML 包含在控制項範本中: <TextBlock Text="{TemplateBinding Text}" .... />

用作來源屬性和目標屬性值的類型必須相符。 當您使用 TemplateBinding 時,沒有機會引入轉換器。 無法比對值會導致剖析 XAML 時發生錯誤。 如果您需要轉換器,您可以使用範本繫結的詳細語法,例如: {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}

在 XAML 中嘗試在 ControlTemplate 定義之外使用 TemplateBinding,會導致剖析器錯誤。

您可以針對範本化父值也推延為另一個繫結的情況使用 TemplateBindingTemplateBinding 的評估可以等到任何必要的執行階段繫結有值為止。

TemplateBinding 一律是單向繫結。 涉及的兩個屬性都必須是相依性屬性。

TemplateBinding 是標記延伸模組。 當需要轉義屬性值為非文字值或處理常式名稱時,通常會實作標記擴充,比僅放在某些類型或屬性上的型別轉換器更具普遍性。 XAML 中的所有標記延伸模組都會在其屬性語法中使用 “{” 和 “}” 字元,這是 XAML 處理器辨識標記延伸模組必須處理屬性的慣例。

注意 在 Windows 執行階段 XAML 處理器實作中,沒有 TemplateBinding 的備用類別表示法。 TemplateBinding 專屬用於 XAML 標記。 沒有直接的方法可以在程式碼中重現行為。

x:Bind 在 ControlTemplate 中

備註

在 ControlTemplate 中使用 x:Bind 需要 Windows 10 1809 版 (SDK 17763) 或更新版本。 如需目標版本的詳細資訊,請參閱 版本調適型程式碼

從 Windows 10 版本 1809 開始,您可以在 ControlTemplate 中使用 TemplateBinding 的任何位置使用 x:Bind 標記延伸模組。

使用 x:Bind 時,ControlTemplate 上的 TargetType 屬性是必要 (非選擇性) 。

透過 x:Bind 支援,您可以在 ControlTemplate 中使用函式繫結和雙向繫結。

在此範例中, TextBlock.Text 屬性會評估為 Button.Content.ToString。 ControlTemplate 上的 TargetType 會做為資料來源,並完成與父系 TemplateBinding 相同的結果。

<ControlTemplate TargetType="Button">
    <Grid>
        <TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
    </Grid>
</ControlTemplate>