次の方法で共有


{TemplateBinding} マークアップ拡張

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

XAML 属性の使用方法

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

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

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

XAML 値

任期 説明
プロパティ名 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 マークアップでのみ使用できます。 コードで動作を再現する簡単な方法はありません。

x:Bind の ControlTemplate での使用

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

Windows 10 バージョン 1809 以降では、ControlTemplate内で TemplateBinding を使用する任意の場所で、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>