Pergunta

Dentro do meu objeto WPF hiearchy eu crio um objeto Window.

No entanto, eu quero o proprietário deste objeto janela para ser o objeto Window de base .

Eu tentei "subindo na árvore", com o seguinte tipo de código, mas esta abordagem parece abaixo do ideal :

(((((((TabGroupPane)((ContentPane) this.Parent).Parent).Parent as
SplitPane).Parent as DocumentContentHost).Parent as 
XamDockManager).Parent as ContentControl).Parent as 
StackPanel).Parent...

Como posso acessar o objeto Window base?

Estou pensando em algo como isto:

pseudo-código:

Window baseWindow = this.BaseParent as Window;
Foi útil?

Solução

Uma abordagem que funciona para todos os tipos é caminhar até a árvore lógica até encontrar um nó do tipo necessário:

Window baseWindow = FindLogicalParent<Window>(this);

Esse método não existe no quadro, então aqui está uma implementação:

internal static T FindLogicalParent<T>(DependencyObject obj)
   where T : DependencyObject
{
    DependencyObject parent = obj;
    while (parent != null)
    {
        T correctlyTyped = parent as T;
        if (correctlyTyped != null)
            return correctlyTyped;
        parent = LogicalTreeHelper.GetParent(parent);
    }

    return null;
}

Para Window especificamente, você pode usar:

Window.GetWindow(this);

Outras dicas

Permita-me responder a esta:

Window baseWindow = Application.Current.Windows[0];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top