我有两个页面,其中包含类似的逻辑。加载页面,单击将显示/隐藏其他按钮的一些按钮,继续下一页。当我点击下一页时,如果单击后退按钮,我将返回上一页。
不同之处在于,当我单击后退按钮时,一个页面(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);
}
答案 0 :(得分:1)
我创建了一个类似的示例应用程序并且具有类似的行为。我发现当你回到页面时,除非页面是期刊中的第一页,否则不会调用构造函数
请阅读Navigation in WPF中的此部分:
祝你好运!使用日志导航页面页面时,会执行以下步骤:
实例化页面(后堆栈上的顶级日记帐分录)。
页面将使用与页面的日记帐分录一起存储的状态进行刷新。
- 醇>
将页面导航回。
答案 1 :(得分:1)
阅读Paul Stovell's article on WPF navigation之后,我想要显示内容的方式无效。
导航时,如果单击“返回”,WPF可能无法知道要传递给构造函数的值;因此它必须保持页面活着。这是跟踪输出:
由于WPF无法调用构造函数,因此不会。它只会使页面保持活跃状态。
他接着提到KeepAlive
如果您没有通过URI导航,并且每次调用Loaded
和Unloaded
都不起作用,那么我可以全部移动我在那里的逻辑,我不需要在后面的导航中调用构造函数。