Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2010年01月24日]

週末、悩んだコードミス: TemplatedParent

2010年01月25日 03:07更新 筆者:K.Ktouth

自分メモ。

  • RelativeSource TemplatedParent

データのバインディングで、DataContext ではなくコントロール(orデータ)を起点として相対パスで指定した場合がある。この時、状況によっては RelativeSource.Self は基準に指定したいコントロール(orデータ)ではない事もある。

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.ValidationAdornerSiteFor).(Validation.HasError)}" Value="True">
  <Setter TargetName="icon" Property="ToolTip" Value="{Binding RelativeSource={RelativeSource SelfTemplatedParent}, Path=(Validation.ValidationAdornerSiteFor).(Validation.Errors)[0].ErrorContent}" />
</DataTrigger>

上記例の場合、二つの相対パスバインディングがある。
上の DataTrigger の場合、トリガーを指定したテンプレートやスタイル、それが適用されるコントロール(orデータ)が基準 = Self になる。
しかし、下の Setter の場合、TargetName プロパティが指定されているため基準がそのターゲットに変更されている。こういうときにコントロール(orデータ)を基準にしたいときは RelativeSource.TemplatedParent を指定する必要がある。

本日のリンク元
その他のリンク元
検索