3

我有两个具有相似逻辑的页面。加载页面,单击一些将显示/隐藏其他按钮的按钮,继续下一页。当我点击下一页时,如果我单击后退按钮,我将返回上一页。

不同之处在于,当我单击后退按钮时,一个页面(FirstPage)将调用构造函数,该构造函数调用重置默认值。另一个页面(SecondPage)没有调用构造函数,我不知道为什么。

public FirstPage()
{
  InitializeComponent();
  DisplayStuff();
}

FirstPage 已KeepAlive设置为False.

public SecondPage(object arg1, object arg2)
{
  InitializeComponent();
  DisplayStuff(arg1, arg2);
}

此页面也已KeepAlive设置为False。这两个页面不继承任何东西,也没有任何东西可以覆盖任何属性。我能看到的唯一区别是空的构造函数,所以我尝试给 SecondPage 一个空的构造函数,但仍然没有运气。

我对 WPF 比较陌生(我每 6 个月工作一两个小时),所以我错过了什么?

这是相关的后退按钮。

<Button Command="{x:Static NavigationCommands.BrowseBack}" />

编辑:当我单击后退按钮时,SecondPage 不会保持其状态。它只是加载一个空页面,因为DisplayStuff尚未调用。

导航代码:

NavigateTo(new SecondPage(arg1, arg2));

protected void NavigateTo(Page page)
{
  NavigationService.Navigate(page);
}
4

2 回答 2

1

我创建了一个类似的示例应用程序并具有类似的行为。我发现当您返回页面时,除非该页面是日记的第一页,否则不会调用构造函数

阅读WPF 导航中的本节:

当使用日志导航回页面页面时,将执行以下步骤:

  1. 页面(后堆栈上的顶部日记条目)被实例化。

  2. 页面将使用与页面的日志条目一起存储的状态进行刷新。

  3. 页面导航回。

祝你好运!

于 2011-04-12T21:18:16.847 回答
1

阅读Paul Stovell 关于 WPF 导航的文章后,我想要显示内容的方式不起作用。

导航时,如果单击“返回”,WPF 不可能知道要传递给构造函数的值;因此它必须使页面保持活动状态。这是跟踪输出:

由于 WPF 不能调用构造函数,所以它不会。它只会让页面保持活力。

他继续提到,KeepAlive如果您不通过 URI 导航,并且Loaded每次Unloaded都被调用,那将不起作用,因此我可以将所有逻辑移到那里,并且不需要在返回导航时调用构造函数.

于 2011-04-12T21:26:45.420 回答