123

理解できませんでしBorderThickness="{TemplateBinding BorderThickness}た。ここにコードがあります:

<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
    <Border Padding="{TemplateBinding Padding}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            SnapsToDevicePixels="True">
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </Border>
</ControlTemplate>

他の種類のバインディングについても説明してください。

4

4 に答える 4

215

TemplateBindingは、テンプレート定義内の要素プロパティにバインドするために使用されます。あなたの例では、次のように書くことができます。

 <Border Padding="{Binding Padding}" ...>

...境界線のパディングプロパティを...のパディングプロパティにバインドすることを意味しますか?「このテンプレートが使用されているコントロールのパディングプロパティ」と言いたいと思います。現時点ではコントロールのx:Nameがわからないため、名前を付けることはできません(たとえ知っていても、別のネームスコープにあるため機能しません)。ただし、相対ソースを定義することでこれを行うことができます

<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>

または、上記のショートカット(*)であるTemplateBindingを使用します

<Border Padding="{TemplateBinding Padding}" ...>

(*)これらのテンプレートシナリオでは冗長性が低いことに加えて、TemplateBindingには通常のバインディングと比較していくつかの違いがあります。

  • コンパイル時に評価されます。(たとえば、Paddingプロパティが存在しない場合、コンパイルエラーが発生します。ただし、TemplatedParentでバインディングを使用すると、実行時にのみエラーが表示されます。)
  • これは常に一方向のバインディングです。
  • ソースプロパティとターゲットプロパティの両方が依存関係プロパティである必要があります。
  • 機能ははるかに少なくなります(StringFormat、Delay、IsAsyncなどはありません。BindingとTemplateBindingExtentionのプロパティを参照しください
于 2012-05-15T09:25:47.427 に答える
71

写真は千の言葉の価値があります。この場合は7分のビデオです:https ://www.youtube.com/watch?v = z-0TZR-7xLI

編集: 例:

  • AButtonにはデフォルトのControlTemplateプロパティとHeightプロパティがあります
  • ControlTemplate独自のプロパティを作成して、のプロパティをオーバーライドしますButton(たとえば、Ellipse-lookingではなく-lookingボタンを作成したい場合Rectangle
  • Ellipse新しいControlTemplateで作成した後、元のButtonのプロパティEllipseと同じサイズにする必要がありますHeight
  • したがって、名前を付けずTemplateBindingにを参照するために使用しButtonますHeightここに画像の説明を入力してください
于 2016-03-11T16:23:35.683 に答える
32

ErenErsönmenzはすでにそれを非常によく説明していますが、概念をよりよく理解するために別の視点を与えたいと思います。

WPFでは、すべてのコントロールがその表示から多かれ少なかれ切り離されています。コントロールのテンプレートはいつでも変更して、完全に異なって見えるようにすることができます。ボタンは、たとえばControlTemplateで構成されているだけで期待どおりに機能します。ここで、コントロールのロジック部分のプロパティを実際に使用するRectangle必要がある場合があります。ControlTemplateそして、それは「視覚的な表現をしているコントロールのこのプロパティを使用する」TemplateBindingことを示しているだけです。ControlTemplate良い例は、すべてのコントロールのプロパティです。それ自体には意味がなく、の子コントロールに対してBackgroundその意味を取得します。TemplateBindingControlTemplate

バインド自体は、MSDNで非常によく説明されています。これはとても素敵なチートシートで、実際、私の隣の壁に掛かっています。利用可能なすべての異なるバインディングの概要がわかります。

于 2012-05-15T09:33:57.917 に答える
6

TemplateBinding Markup ExtensionからTemplateBinding、コントロールテンプレートのプロパティの値を、テンプレート化されたコントロールのその他の公開されたプロパティの値にリンクします。つまり、テンプレートの値をバインドするためのものです。

バインディングは、バインディングターゲットとデータソースのプロパティを接続します。

于 2012-05-15T09:29:23.580 に答える