2011-08-23 15 views

risposta

6

PopupRoot è internal-PresentationFramework, quindi non è possibile accedervi da vostra assemblea. È possibile confrontare il nome del tipo con GetType().FullName, ma PopupRoot è un dettaglio di implementazione che può cambiare nelle future versioni del framework, quindi non ci fare affidamento.

+0

Tutto ciò mi dice che ho bisogno di una soluzione più generica. –

2

PopupRoot è interno, quindi non sarà possibile fare riferimento. Tuttavia, se si utilizza LogicalTreeHelper, sarà possibile trovare Popup se esistente. LogicalTreeHelper restituirà NULL se non esiste un genitore logico, quindi è necessario utilizzarlo in aggiunta alla struttura ad albero con VisualTreeHelper.

Ecco un esempio di come si può utilizzare:

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); 
} 
Problemi correlati