WPF - FindName devuelve nulo cuando no debería

FindName está roto para mí :(

Si eres un experto en tales cosas, me encantaría recibir ayuda.

El objeto que estoy buscando está ahí. Tengo pruebas.

Aquí está el escenario:

ToggleButton button = (ToggleButton)sender;
Popup popup = (Popup)button.FindName("popSelectIteration");

popup es nulo pero no siempre. Solo a veces. Pero incluso cuando está configurado como nulo, el niño que estoy buscando está allí.

Puse un punto de quiebre cuando era nulo y tomé estas dos capturas de pantalla.

Aquí es donde FindName devuelve nulo para "popSelectIteration":

texto alternativo http://img175.imageshack.us/img175/2055/popupisnull.png

Pero si profundizas en el reloj, ves que el niño está allí:

texto alternativo http://img708.imageshack.us/img708/8757/watchwithpopupnull.png

Entonces, ¿qué me estoy perdiendo? ¿Por qué FindName no lo encuentra? Como puede ver en la captura de pantalla, esto no es un problema de tiempo (el reloj FindName es nulo pero la ruta directa está bien).

¿Hay una mejor manera de encontrar un control?

Nota al margen: Si está interesado en el XAML para el botón de alternar en cuestión, puede encontrarlo en esta pregunta:WPF - FrameworkElement - ¿Enumerar todos los descendientes?.

Actualizar: Investigué un poco para ver por qué esto falla algunas veces y otras veces funciona. Tengo una animación que llamaNameScope.SetNameScope((DependencyObject)form, new NameScope()); (Código de método completoaquí) Justo después de esa llamada, FindName comienza a fallar.

Realmente no entiendo esa llamada. Creo que copié y pegué el código. De todos modos, lo comenté. Pero me encantaría saber por qué esto está fallando.

Respuestas a la pregunta(6)

Su respuesta a la pregunta