{TemplateBinding} 標記延伸

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

XAML 屬性用法

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

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

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

XAML 值

詞彙 描述
propertyName 在 setter 語法中設定的屬性的名稱。 這必須是相依性屬性。
sourceProperty 正在範本化的類型上存在的另一個相依性屬性的名稱。

備註

使用 TemplateBinding 是定義控制項範本的基本部分,無論是自訂控制項作者,還是要取代現有控制項的控制項範本。 如需詳細資訊,請參閱快速入門:控制項範本

propertyNametargetProperty 使用相同的屬性名稱是相當常見的。 在這種情況下,控制項可以在其本身上定義一個屬性,並將該屬性轉送到其元件之一的現有且直覺是具名的屬性。 例如,在其組成中包含 TextBlock 的控制項 (用於顯示控制項自己的 Text 屬性) 可能會將此 XAML 做為控制項範本的一部分包含在內:<TextBlock Text="{TemplateBinding Text}" .... />

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

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

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

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

TemplateBinding 是標記延伸。 如果必須將屬性 (Attribute) 值加上逸出符號,以免成為常值或處理常式名稱,而且這個動作必須更全面地實施 (而不是只對特定類型或屬性 (Property) 設定類型轉換子 (Type Converter)),則通常會實作標記延伸。 XAML 中的所有標記延伸在其屬性語法中都使用「{" and "}」字元,這是 XAML 處理器識別標記延伸必須處理屬性的慣例。

注意:在 Windows 執行階段 XAML 處理器實作中,TemplateBinding 沒有支援類別表示法。 TemplateBinding 專供 XAML 標記使用。 在程式碼中重現行為的方式並不簡單。

ControlTemplate 中的 x:Bind

注意

在 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>