gpt4 book ai didi

c# - WPF - FindName 在不应返回 null 时返回

转载 作者:IT王子 更新时间:2023-10-29 04:08:52 29 4
gpt4 key购买 nike

FindName 对我来说是坏的:(

我要找的对象就在那里。我有证据。

场景如下:

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

popup 为 null 但并非总是如此。只是偶尔。但即使它被设置为 null,我正在寻找的 child 也在那里。

我在它为空的时候打了一个断点,抓取了这两个截图。

这是 FindName 为“popSelectIteration”返回 null 的地方。

但如果你深入 watch ,你会发现 child 就在那里。

那我错过了什么?为什么 FindName 找不到它?从屏幕截图中可以看出,这不是时间问题(FindName 监视为空,但直接路径没问题)。

有没有更好的方法找到控件?

旁注:如果您对相关切换按钮的 XAML 感兴趣,可以在这个问题中找到它:WPF - FrameworkElement - Enumerate all decendents? .


更新:我做了一些挖掘以了解为什么它有时会失败而有时会起作用。我有一个调用 NameScope.SetNameScope((DependencyObject)form, new NameScope()); 的动画(完整方法代码 here )。在该调用之后,FindName 开始失败。

我真的不明白那个电话。我想我复制并粘贴了代码。不管怎样,我把它注释掉了。但我很想知道为什么会失败。

最佳答案

我猜这与视觉树和逻辑树之间的区别有关。该控件位于逻辑树中,但可能尚未应用此控件的模板,因此 FindName 不会返回任何有用的信息。

您可以尝试调用 ApplyTemplate();首先在容器上。

这也可以解释为什么它有时会返回一些东西。

关于c# - WPF - FindName 在不应返回 null 时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285491/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com