亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

【WPF】RelativeSource

BlendでWPF書いているといきなり現れることのあるRelativeSource。
よく分からなかったのでメモ。

資料はこれ。

Pro Wpf in C# 2008: Windows Presentation Foundation With .net 3.5 (Books for Professionals by Professionals)

Pro Wpf in C# 2008: Windows Presentation Foundation With .net 3.5 (Books for Professionals by Professionals)

relativeSource

現在のオブジェクトと関係するソースを取ってこれる。関係とは以下の4つ。

  • Self
    • そのオブジェクトが属するエレメント自身を返す.属するオブジェクトの別のプロパティをバインドしたいときに。
  • FindAncestor
    • そのオブジェクトが属するエレメントから祖先を辿り、特定のエレメントを取得できる。また以下のオプションが有る。
      • AncestorType
        • 取得するエレメントの型を指定する
      • AncestorLevel
        • AncestorTypeで取得したエレメントのうち、何番目に現れたエレメントを採用するかを指定する。
<-- TextBlockが属するWindowTitleTextBlockに表示する -->
<TextBlock Text="{Binding Path=Title, RelaticeSorce={RelativeSource FindAncestor, AncestorType={x:Type Window}} }">
  • PreviousData
    • 直前にデータバインディングされたソースを用いる。リストをバインドしたときに、直前のデータによって値を変更させたい場合などに用いる。
  • TemplateParent
    • テンプレートを設定しているエレメントをソースとして指定する。ControlTemplateやDataTemplate内でのみ用いる。

使いこなせれば相当自由なことできるんだなー。
ただ再利用性を損ないそうなものもあるね.