Рассмотрим ControlA
и ControlB
, где ControlA - это элемент управления содержимым, означающий, что он может содержать другие элементы управления.
<ControlA>
<ControlB />
</ControlA>
Логически свойство Parent экземпляра ControlB в данном случае является экземпляром ControlA.
Однако, если вы посмотрите на Template
setter стиля ControlA по умолчанию, вы можете найти сложный Xaml, содержащий некоторое визуальное управление состоянием и иерархию границ и сеток, и, наконец, похороненный в этом лоте, есть ContentPresenter
, где будет размещен дочерний элемент управления.
Рекурсивно зацикливая VisualTreeHelper.Parent найдет каждый элемент, определенный в шаблоне, от ContentPresenter
до "логического" родительского элемента и затем за его пределами.