1

如果孩子在 ElementName 中明确命名,我可以绑定到孩子的背景:

<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)。做到这一点的唯一方法是创建一个新控件,该控件将 Children 作为 ObservableCollection。FWIW 我认为这不值得麻烦,最好使用 ElementName。

于 2010-09-28T14:07:45.470 回答