1

子が ElementName で明示的に指定されている場合、子の Background にバインドできます。

<TreeViewItem Header="Test" Background="{Binding ElementName=TestChild, Path=Background}">
   <TextBox Name="TestChild" Text="Hello?" Background="{Binding SomeBinding}" />
</TreeViewItem>

特定の名前ではなく、相対的な位置を使用したいと思います。相対を使用して子にバインドすることは可能ですか? この場合、常に最初の子になります。以下は機能しませんが、機能するはずです。

<TreeViewItem Header="Test" Background="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Children[0].Background}">
4

1 に答える 1

2

Treeview (または他の itemsControl) から継承する新しいコントロールを作成しない限り、これは機能しません。その理由はすべて、バインディングが機能する方法に関係しています。そのバインディングが設定されている場合、コレクションが空であるため Children[0] は存在しません。この後、コレクションはテキストボックスを含むように更新され、変更されたことを通知しません (ObservableCollection ではありません)。これを行う唯一の方法は、ObservableCollection として Children を持つ新しいコントロールを作成することです。FWIW 手間をかける価値はないと思いますし、ElementName を使用したほうがよいでしょう。

于 2010-09-28T14:07:45.470 に答える