FindName для меня нарушен: (
Если вы являетесь экспертом в таких вещах, я бы очень хотел помочь.
Объект, который я ищу, есть. У меня есть доказательство.
Вот сценарий:
ToggleButton button = (ToggleButton)sender;
Popup popup = (Popup)button.FindName("popSelectIteration");
popup
имеет значение null, но не всегда. Просто иногда. Но даже если для него установлено значение null, я ищу его.
Я поставил точку останова, когда он был пустым, и схватил эти два скриншота.
Это где FindName возвращает значение null для "popSelectIteration":
alt text http://img175.imageshack.us/img175/2055/popupisnull.png
Но если вы заглянете в часы, вы увидите, что ребенок там:
alt text http://img708.imageshack.us/img708/8757/watchwithpopupnull.png
Так что мне не хватает? Почему FindName не находит его? Как видно из снимка экрана, это не проблема времени (часы FindName равны нулю, но прямой путь в порядке).
Есть ли лучший способ найти элемент управления?
Боковое примечание. Если вы заинтересованы в XAML для рассматриваемой кнопки переключения, ее можно найти в этом вопросе: WPF - FrameworkElement - Перечислить все декомпоненты?.
Обновление. Я сделал несколько копаний, чтобы понять, почему это не срабатывает несколько раз и в другое время. У меня есть анимация, которая вызывает NameScope.SetNameScope((DependencyObject)form, new NameScope());
(полный код метода здесь). Сразу после этого вызов FindName начинает сбой.
Я действительно не понимаю этот звонок. Кажется, я скопировал и вставил код. Во всяком случае, я прокомментировал это. Но я хотел бы знать, почему это не удается.