173

これら2つのバインディングの違いは何ですか?

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{TemplateBinding Property=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>

4

6 に答える 6

211

TemplateBindingはまったく同じものではありません。MSDNのドキュメントは、ソフトウェア機能について単音節のSDEをクイズする必要がある人々によって作成されることが多いため、ニュアンスは完全には正しくありません。

TemplateBindingsは、コンパイル時に、コントロールテンプレートで指定されたタイプに対して評価されます。これにより、コンパイルされたテンプレートのインスタンス化がはるかに高速になります。templatebindingで名前をいじるだけで、コンパイラがそれにフラグを立てるのがわかります。

バインディングマークアップは実行時に解決されます。実行には時間がかかりますが、バインディングは、テンプレートによって宣言されたタイプに表示されないプロパティ名を解決します。ゆっくりと、バインディング操作はアプリケーションのCPUをほとんど使用しないため、その種類の相対的なものであることを指摘します。コントロールテンプレートを高速でブラストしていると、気付くかもしれません。

実際のところ、Bindingを恐れることはできないが、恐れることがない場合はTemplateBindingを使用してください。

于 2009-12-01T01:52:30.467 に答える
37

TemplateBinding-通常のBindingを使用するよりも制限があります

  • バインディングよりも効率的ですが、機能が少なくなります
  • ControlTemplateのビジュアルツリー内でのみ機能します
  • Freezablesのプロパティでは機能しません
  • ControlTemplateのトリガー内では機能しません
  • プロパティを設定するためのショートカットを提供します(冗長ではありません)。例:{TemplateBinding targetProperty}

通常のバインディング-TemplateBindingの上記の制限はありません

  • 親のプロパティを尊重します
  • 明示的に設定された値をクリアするためにターゲット値をリセットします
  • 例:<Ellipse Fill = "{Binding RelativeSource = {RelativeSource TemplatedParent}、Path = Background}" />
于 2012-02-27T05:47:52.340 に答える
23

もう1つ-TemplateBindingsは値の変換を許可しません。たとえば、Converterを渡すことはできず、intを文字列に自動的に変換することもありません(これはBindingでは通常のことです)。

于 2011-05-24T16:39:44.673 に答える
17

TemplateBindingは、TemplatedParentを使用したBindingの省略形ですが、Bindingクラスのすべての機能を公開しているわけではありません。たとえば、TemplateBindingからBinding.Modeを制御することはできません。

于 2009-07-15T19:16:38.140 に答える
1

TemplateBindingはFreezableタイプ(ブラシオブジェクトを含む)をサポートしていないと思いました。問題を回避するため。TemplatedParentを利用できます

于 2010-01-20T14:41:28.670 に答える
0

それらは同じように使用されますが、いくつかの違いがあります。TemplateBindingドキュメントへのリンクは次のとおりです。http: //msdn.microsoft.com/en-us/library/ms742882.aspx

于 2009-07-15T15:56:25.393 に答える