Como posso acessar o pai de base de um objeto em uma hierarquia WPF?
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;
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