Как я могу получить тип System.Windows.Controls.Primitive.PopupRoot? - PullRequest
7 голосов
/ 23 августа 2011

Изображения могут сказать тысячу слов.

Когда я поднимаюсь по визуальному дереву, я вижу, что последний родитель имеет тип System.Windows.Controls.Pimitives.PopupRoot enter image description here

НоWhey, я пытаюсь фактически сделать сравнение с этим типом VS, жалуется, что это не действительно.

enter image description here

Ответы [ 3 ]

7 голосов
/ 23 августа 2011

PopupRoot - от internal до PresentationFramework, поэтому вы не можете получить к нему доступ из вашей сборки. Вы можете сравнить имя типа с GetType().FullName, но PopupRoot - это деталь реализации, которая может измениться в будущих версиях фреймворка, поэтому я бы не стал полагаться на нее.

5 голосов
/ 05 декабря 2016

PopupRoot является внутренним, поэтому вы не сможете ссылаться на него. Однако, если вы используете LogicalTreeHelper, вы сможете найти Popup, если существует. LogicalTreeHelper вернет NULL, если нет логического родителя, поэтому вам нужно использовать его в дополнение к пошаговому визуальному дереву с VisualTreeHelper.

Вот пример того, как вы можете его использовать:

var popupRootFinder = VisualTreeHelper.GetParent((DependencyObject)your_visual_element);
while (popupRootFinder != null)
{
    var logicalRoot = LogicalTreeHelper.GetParent(popupRootFinder);
    if (logicalRoot is Popup)
    {
        // popup root found here
        break;
    }

    popupRootFinder = VisualTreeHelper.GetParent(popupRootFinder);
}
0 голосов
/ 07 сентября 2018

Если вы хотите получить объект Popup из PopupRoot, вы можете сделать это с помощью этого кода, где "d" имеет тип PopupRoot:

Popup customPopup = LogicalTreeHelper.GetParent(d) as Popup;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...