是什么决定了NavigationCommands.BrowseBack是否调用了页面构造函数?
我有两个页面,其中有类似的逻辑。 加载页面,单击将显示/隐藏其他按钮的一些按钮,继续下一页。 当我点击下一页时,如果单击后退按钮,我将返回上一页。
不同之处在于,当我单击后退按钮时,一个页面(FirstPage)将调用构造函数,后面的按钮会调用重置默认值。 另一个页面(SecondPage)没有得到调用的构造函数,我不知道为什么。
public FirstPage() { InitializeComponent(); DisplayStuff(); }
FirstPage将KeepAlive
设置为False
。
public SecondPage(object arg1, object arg2) { InitializeComponent(); DisplayStuff(arg1, arg2); }
此页面还将KeepAlive
设置为False
。 这两个页面不会inheritance任何内容,也没有任何内容覆盖任何属性。 我能看到的唯一区别是空构造函数,所以我尝试给SecondPage一个空构造函数,但仍然没有运气。
我对WPF比较新(我每6个月工作一到两个小时),所以我错过了什么?
如果相关,这是后退按钮。
编辑:当我单击后退按钮时,SecondPage不保持其状态。 它只是加载一个空页面,因为还没有调用DisplayStuff
。
导航代码:
NavigateTo(new SecondPage(arg1, arg2)); protected void NavigateTo(Page page) { NavigationService.Navigate(page); }
我创建了一个类似的示例应用程序并具有类似的行 我发现当你回到页面时,除非页面是日志中的第一页,否则不会调用构造函数
在WPF中导航中阅读本节:
使用日志导航页面页面时,会执行以下步骤:
页面(后堆栈上的顶级日记帐分录)已实例化。
页面将使用与页面的日记帐分录一起存储的状态进行刷新。
页面导航回。
祝好运!
在阅读了Paul Stovell关于WPF导航的文章后 ,我想要显示内容的方式无法发挥作用。
导航时,如果单击“返回”,WPF可能无法知道要传递给构造函数的值; 因此它必须保持页面活着。 这是跟踪输出:
由于WPF无法调用构造函数,因此不会。 它只会让页面保持活力。
他继续提到如果你不通过URI导航KeepAlive
不起作用,每次都调用Loaded
和Unloaded
,所以我可以把我所有的逻辑移到那里,我不需要调用构造函数后面的导航。