Поскольку Button
добавляется в визуальное дерево только при отображении всплывающего окна.
Хм ... хитрый ...
Редактировать
В следующем предположении предполагается, что ваше всплывающее окно определено в XAML UserControl
, поэтому, хотя его дочерний элемент может отсутствовать в визуальном дереве, элемент управления примитивом всплывающего окна.
Повторное использование некоторого кода, который я выложил ранее (мне действительно нужен блог).
public static class VisualTreeEnumeration
{
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
foreach (var descendent in Descendents(child))
yield return descendent;
}
}
}
Это добавляет метод расширения к DependencyObject
, который использует VisualTreeHelper
для унификации поиска объектов, добавленных в визуальное дерево. Таким образом, в коде управления пользователя вы можете сделать это: -
var popup this.Descendents()
.OfType<Popup>()
.Where(p => p.Child == button)
.FirstOrDefault();
Это найдет Popup
, который является родителем "кнопки".