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());
的完整方法代码)。在那次调用之后,FindName 开始失败。
我真的不明白那个电话。我想我复制并粘贴了代码。不管怎样,我把它注释掉了。但我很想知道为什么这会失败。