【发布时间】:2011-01-18 03:13:32
【问题描述】:
FindName 对我来说是坏的 :(
我正在寻找的对象在那里。我有证据。
这是场景:
ToggleButton button = (ToggleButton)sender;
Popup popup = (Popup)button.FindName("popSelectIteration");
popup 为空,但并非总是如此。偶尔而已。但即使它设置为 null,我正在寻找的孩子也在那里。
我在它为空的时候打了一个断点,然后抓取了这两张截图。
FindName 为“popSelectIteration”返回 null。
但如果你深入手表,你会发现孩子就在那里。
那么我错过了什么?为什么 FindName 找不到它?正如您从屏幕截图中看到的,这不是时间问题(FindName 手表为空,但直接路径很好)。
有没有更好的方法来查找控件?
旁注:如果您对相关切换按钮的 XAML 感兴趣,可以在以下问题中找到它:WPF - FrameworkElement - Enumerate all decendents?。
更新:我进行了一些挖掘以了解为什么有时会失败而有时会起作用。我有一个调用NameScope.SetNameScope((DependencyObject)form, new NameScope());(完整方法代码here)的动画。在那次调用之后,FindName 开始失败。
我不太明白那个电话。我想我复制并粘贴了代码。不管怎样,我把它注释掉了。但我很想知道为什么会失败。
【问题讨论】: