WPFを書いていると親の要素を取得したいときがくると思います。
その場合のやり方を書きます。
コードを書いたほうがわかりやすいので以下に書きます。
以下のコードはTextBlockに親であるWindowの幅をテキスト表示しています。
<Window x:Class="LivetWPFApplication1.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" Title="MainWindow" Height="350" Width="525"> <Grid> <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualWidth}" /> </Grid> </Window>
BindingにRelativeSourceを使うことで、子(TextBlock)から親(Window)のプロパティをバインドできます。
仕組み的には、子の位置からAncestorTypeで指定した型に一致する要素を検索する感じです。
階層が深くなると複数見つかる場合もあると思います。
そういう場合は、AncestorTypeと同列でAncestorLevelを指定すればOKです。
2番目に見つかった要素を取得する場合は、AncestorLevel=2で。
省略したら最初に見つかった要素(AncestorLevel=1)になります。
詳しくはMSDNで。
RelativeSource クラス (System.Windows.Data)
階層が深くなると遅くなりそうな気がしますが、使いドコロはあると思います。
Movselexで使用した例はそのうちあげます。