次の方法で共有


{TemplateBinding} マークアップ拡張

コントロール テンプレート内のプロパティの値を、テンプレート 化されたコントロールの他の公開プロパティの値にリンクします。 TemplateBinding は、XAML の ControlTemplate 定義内でのみ使用できます。

XAML 属性の使用方法

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

XAML 属性の使用法 (テンプレートまたはスタイルの Setter プロパティの場合)

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

XAML 値

任期 Description
propertyName setter 構文で設定されているプロパティの名前。 これは依存関係プロパティである必要があります。
ソースプロパティ テンプレート化されている型に存在する別の依存関係プロパティの名前。

注釈

TemplateBinding の使用は、カスタム コントロール作成者の場合、または既存のコントロールのコントロール テンプレートを置き換える場合に、コントロール テンプレートを定義する方法の基本的な部分です。 詳細については、「 コントロール テンプレート」を参照してください。

propertyNametargetProperty で同じプロパティ名が使用されるのはかなり一般的です。 この場合、コントロール自体にプロパティを定義し、そのコンポーネント パーツの既存の直感的な名前付きプロパティにプロパティを転送できます。 たとえば、コントロールの独自の Text プロパティを表示するために使用される、その合成に TextBlock を組み込むコントロールには、コントロール テンプレートの一部として次の XAML が含まれる場合があります。<TextBlock Text="{TemplateBinding Text}" .... />

ソース プロパティとターゲット プロパティの値として使用される型は一致する必要があります。 TemplateBinding を使用しているときにコンバーターを導入する機会はありません。 値の一致に失敗すると、XAML の解析時にエラーが発生します。 コンバーターが必要な場合は、テンプレートバインドのために詳細構文を使用できます。 {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}

XAML で ControlTemplate 定義の外部で TemplateBinding を使用しようとすると、パーサー エラーが発生します。

TemplateBinding は、テンプレート化された親値も別のバインディングとして遅延される場合に使用できます。 TemplateBinding の評価は、必要なランタイム バインドに値が含まれるまで待機できます。

TemplateBinding は常に一方向バインディングです。 関係するプロパティはどちらも依存関係プロパティである必要があります。

TemplateBinding はマークアップ拡張機能です。 マークアップ拡張は通常、リテラル値またはハンドラー名以外の属性値をエスケープする必要があり、特定の型またはプロパティに型コンバーターを配置するよりもグローバルな要件である場合に実装されます。 XAML のすべてのマークアップ拡張では、属性構文で "{" 文字と "}" 文字が使用されます。これは、マークアップ拡張機能が属性を処理する必要があることを XAML プロセッサが認識する規則です。

手記 Windows ランタイム XAML プロセッサの実装では、 TemplateBinding のバッキング クラス表現はありません。 TemplateBinding は、XAML マークアップでのみ使用できます。 コードで動作を再現する簡単な方法はありません。

ControlTemplate における x:Bind

ControlTemplate で x:Bind を使用するには、Windows 10 バージョン 1809 (SDK 17763) 以降が必要です。 ターゲット バージョンの詳細については、「 バージョン アダプティブ コード」を参照してください。

Windows 10 バージョン 1809 以降では、ControlTemplateTemplateBinding を使用する任意の場所で x:Bind マークアップ拡張機能を使用できます。

x:Bind を使用する場合、ControlTemplateTargetType プロパティは必須です (省略できません)。

x:Bind のサポートでは、ControlTemplate関数バインドと双方向バインドの両方を使用できます。

この例では、 TextBlock.Text プロパティは Button.Content.ToString に評価されます。 ControlTemplate の TargetType はデータ ソースとして機能し、親に対する TemplateBinding と同じ結果を実現します。

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