Как привязать к фону ребенка в Xaml? - PullRequest
1 голос
/ 28 сентября 2010

Я могу привязать фон ребенка, если имя ребенка явно указано в 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}">

1 Ответ

2 голосов
/ 28 сентября 2010

Если вы не создадите новый элемент управления, который наследует от Treeview (или любого другого itemsControl), это работать не будет. Все это связано с тем, как работает привязка. Когда эта привязка установлена, Children [0] не существует, так как коллекция пуста. после этого коллекция обновляется, чтобы включить ваше текстовое поле, и не выдает уведомления об изменении (это не ObservableCollection). Единственный способ сделать это - создать новый элемент управления с дочерним элементом в качестве ObservableCollection. FWIW Я не думаю, что это стоит хлопот и вам лучше использовать ElementName.

...