C# 为什么调试器在这里说Frame.Content为null
我已经习惯了WinForms,所以这不是我所期望的。在下面的代码中,ActiveView是一个框架,Register是Page。我想将注册页面加载到ActiveView中,然后更改按钮上的文本。即使页面加载,调试器也会在SetCloseButtonText中显示C# 为什么调试器在这里说Frame.Content为null,c#,wpf,C#,Wpf,我已经习惯了WinForms,所以这不是我所期望的。在下面的代码中,ActiveView是一个框架,Register是Page。我想将注册页面加载到ActiveView中,然后更改按钮上的文本。即使页面加载,调试器也会在SetCloseButtonText中显示ActiveView.Content==null。为什么呢 private void btnRegister_Click(object sender, RoutedEventArgs e) { S
ActiveView.Content==null
。为什么呢
private void btnRegister_Click(object sender, RoutedEventArgs e)
{
SwapActiveView(Register);
}
public void SwapActiveView(Page NewPage)
{
if (ActiveView.Content == null || !ActiveView.Content.Equals(NewPage))
{
if (ActiveView.Content != null)
{
PreviousViews.Add((Page)ActiveView.Content);
}
ActiveView.Content = NewPage;
}
else
{
ActiveView.Content = NewPage;
}
SetCloseButtonText();
}
private void SetCloseButtonText()
{
if (PreviousViews.Count == 0 && ActiveView.Content == null)
{
tbCloseButton.Text = "Close";
}
else
{
tbCloseButton.Text = "Back";
}
}
我最终找到了答案。无论是调用navigate函数还是仅仅更改内容,框架都会异步导航。所以我只需要添加这个方法并调用我的函数
private void ActiveView_Navigated(object sender, NavigationEventArgs e)
{
SetCloseButtonText();
}
你有没有仔细检查代码,看看发生了什么?在SwapActiveView的开始处放置一个断点,然后单击单步查看发生了什么。您确定NewPage不是空的吗?如果这些都没有帮助,那么您需要提供更多信息代码>然后转到
SetCloseButtonText()代码>这就是我困惑的地方。WPF是否有什么东西使得它在按钮点击功能完成之前不设置内容?你看过NewPage了吗?如果ActiveView.Content不为null且NewPage为null,则ActiveView.Content将设置为null,对吗?另外,您还应该看看SwapActiveView开头的ActiveView.Content。我也这么认为。SwapActiveView的第一个if语句具有ActiveView.Content=null,NewPage被设置为我要显示的页面的实例化。这一切都很好,只是在SetCloseButtonText调用中没有拾取内容。另外,如果我第二次调用SwapActiveView,内容设置为NewPage实例化,我假设单步执行代码有助于隔离问题。确实如此,但我需要更好地理解我使用的控件。谢谢你的帮助,谢谢。我不知道这是否会帮助任何人在未来,但它可能会。