WPF - FindName retorna nulo quando não deve
FindName está quebrado para mim :(
Se você é especialista em tais coisas, eu adoraria alguma ajuda.
O objeto que estou procurando está lá. Eu tenho provas.
Aqui está o cenário:
ToggleButton button = (ToggleButton)sender;
Popup popup = (Popup)button.FindName("popSelectIteration");
popup
é nulo, mas nem sempre. Só às vezes. Mas mesmo quando definido como nulo, o filho que estou procurando está lá.
Coloquei um ponto de interrupção quando era nulo e peguei essas duas capturas de tela.
É onde FindName está retornando nulo para "popSelectIteration":
texto alternativo http://img175.imageshack.us/img175/2055/popupisnull.png
Mas se você olhar o relógio, verá que a criança está lá:
texto alternativo http://img708.imageshack.us/img708/8757/watchwithpopupnull.png
Então o que estou perdendo? Por que o FindName não o encontra? Como você pode ver na captura de tela, esse não é um problema de tempo (o relógio FindName é nulo, mas o caminho direto é bom).
Existe uma maneira melhor de encontrar um controle?
Nota: Se você estiver interessado no botão de alternância em XAML do XAML, ele pode ser encontrado nesta pergunta:WPF - FrameworkElement - enumera todos os decendentes?.
Atualizar: Fiz algumas pesquisas para ver por que isso falha algumas vezes e outras vezes funciona. Eu tenho uma animação que chamaNameScope.SetNameScope((DependencyObject)form, new NameScope());
(Código completo do métodoaqui) Logo após essa chamada, o FindName começa a falhar.
Eu realmente não entendo essa ligação. Acho que copiei e colei o código. Enfim, eu comentei. Mas eu adoraria saber por que isso está falhando.