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