2011-08-23 18 views

Respuesta

6

PopupRoot es internal-PresentationFramework, por lo que no se puede acceder a él desde su montaje. Puede comparar el nombre del tipo con GetType().FullName, pero PopupRoot es un detalle de la implementación que puede cambiar en futuras versiones del marco, por lo que no confiaría en él.

+0

Todo lo cual me dice que necesito una solución más genérica. –

2

PopupRoot es interno, por lo que no podrá hacer referencia a él. Sin embargo, si usa LogicalTreeHelper, podrá encontrar Popup si existe. LogicalTreeHelper devolverá NULL si no hay un elemento primario lógico, por lo que debe usarlo además de walking visual tree con VisualTreeHelper.

Aquí es un ejemplo de cómo se puede usar:

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); 
} 
Cuestiones relacionadas