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>
他の種類のバインディングについても説明してください。
TemplateBindingは、テンプレート定義内の要素プロパティへのバインドに使用されます。あなたの例では、次のように書くことができます
<Border Padding="{Binding Padding}" ...>
what?境界線のパディングプロパティをパディングプロパティにバインドすることを意味します。テンプレートが使用されています。」現時点では、コントロールのx:Nameがわからないため、名前を付けることはできません(別の名前スコープにあるため機能しません)。ただし、相対ソースを定義することでこれを行うことができます
<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>
または上記のショートカット(*)であるTemplateBindingを使用します
<Border Padding="{TemplateBinding Padding}" ...>
(*)これらのテンプレートシナリオでは冗長性が低いことに加えて、TemplateBindingには通常のバインディングと比較していくつかの違いがあります。
写真は1000語の価値があります。この場合、7分のビデオです: https://www.youtube.com/watch?v=z-0TZR-7xLI
EDIT:例:
ErenErsönmenzはすでにそれを非常によく説明しましたが、概念をよりよく理解するために別の視点を与えたいと思います。
WPFでは、すべてのコントロールがプレゼンテーションから多少切り離されています。コントロールのテンプレートをいつでも変更して、外観を完全に変えることができます。ボタンは、たとえばControlTemplate
のみで構成されるRectangle
で期待どおりに機能します。場合によっては、ControlTemplate
がコントロールのロジック部分のプロパティを実際に使用する必要がある場合があります。そして、それはTemplateBinding
がControlTemplate
に「視覚的なプレゼンテーションを提供しているコントロールのこのプロパティを使用する」だけであるということです。良い例は、すべてのコントロールのBackground
プロパティです。それ自体には意味がなく、TemplateBinding
によってControlTemplate
の子コントロールに意味を与えます。
バインド自体は MSDN で説明されています。 これ は非常に素晴らしいチートシートで、実際に私の隣の壁にぶら下がっています。利用可能なすべての異なるバインディングの概要を示します。
From TemplateBinding Markup Extension 、TemplateBinding
は、コントロールテンプレート内のプロパティの値を、テンプレート化されたコントロール上の他の公開プロパティの値にリンクします。つまり、テンプレートの値をバインドするためのものです。
Binding は、バインディングターゲットとデータソースのプロパティを接続します。