为什么UIHelper.FindVisualParent <mainwindow>(this)有时会返回null?</mainwindow>

时间:2013-06-17 12:32:34

标签: c# wpf

我在每个标签内都有MainWindow和User Controls。 当我在标签之间切换太快或有时甚至没有切换时我在主屏幕中变为空;

var main = UIHelper.FindVisualParent<MainWindow>(this);

为什么会发生这种情况你知道吗? 让我们说它在7-10次尝试中显示错误,例如main为null。 我在用户控件中使用它来访问MainWindow的控件。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您必须等到UserControl已添加到VisualTree,即在应用模板后......最简单的方法是等到Loaded事件被解雇了。

然后,您可以安全地向上导航层次结构并查找MainWindow

请记住,当您切换标签时使用TabControl,消失的标签将卸载其视觉内容。

因此,您可能需要在Unloaded上观看UserControl事件,以确保在不再使用VisualTree时不会调用VisualTreeHelper

如果您想要阻止卸载行为,那么您可以修改TabControl行为......但原始TabControl的设计就是为了有效地创建视觉效果。