C# 如何使用空白页模板在Windows 8.1中存储状态?
我正在将我的Windows Phone 8应用程序迁移到Windows 8.1应用程序,我已创建了一个带有空白页面模板的页面。其中有一些项目,如TextBlock、ComboBox和TextBox。现在,有一个item LocationTextBlock,其周围有边框。当我单击它时,它会导航到一个新的页面LocationPage,在这里我需要选择位置并保存该对象,然后使用Frame.GoBack()方法进行导航。现在的问题是,当我返回时,我得到LocationData的对象,但是之前创建的LocationTextBlock显示为null,因此我无法在该TextBlock中填充位置 问题C# 如何使用空白页模板在Windows 8.1中存储状态?,c#,windows-8.1,C#,Windows 8.1,我正在将我的Windows Phone 8应用程序迁移到Windows 8.1应用程序,我已创建了一个带有空白页面模板的页面。其中有一些项目,如TextBlock、ComboBox和TextBox。现在,有一个item LocationTextBlock,其周围有边框。当我单击它时,它会导航到一个新的页面LocationPage,在这里我需要选择位置并保存该对象,然后使用Frame.GoBack()方法进行导航。现在的问题是,当我返回时,我得到LocationData的对象,但是之前创建的Loc
请提供一些代码或说明,说明是否可以使用空白页模板完成,因为我在其中添加了许多行代码。可以使用空白页模板完成(尽管使用NavigationHelper将是首选方式)。 您需要做的是在页面的构造函数中将NavigationCacheMode设置为Enabled:
this.NavigationCacheMode = NavigationCacheMode.Enabled;
这样,缓存包含所有属性的页面。因此,当您向后导航时,您将返回页面从中导航时的状态。但是,如果您导航到此页面而不是通过backnavigation,您仍然会返回不需要的已保存状态。解决方案是清理OnNavigatedTo(NavigationEventArgs e)
方法if(e.NavigationMode!=NavigationMode.Back)
中的所有资源(初始化所需变量,将UI元素设置为默认值等)。不知道这是否是最好的方法,但它会起作用的
编辑:
您甚至可以使用弹出按钮或ContentDialog代替LocationPage,这样您就不需要从页面导航,因此不需要缓存/保存页面。
…我得到LocationData的对象,但先前创建的LocationTextBlock显示为null
-您的意思是LocationTextBlock
在您导航回后为null吗?@kennyzx Yes LocationTextBlock为null它按预期工作,但是启用NavigationCacheMode有什么问题吗?到目前为止,它没有给我带来任何问题:)。您可以在此处阅读此主题:当我再次打开同一页面时,我的应用程序正在崩溃,除了反向导航。请建议我应该如何解决此问题?我需要使用不同的页面来定位。如果你在导航模式不是反向导航的情况下发布你所做的事情就足够了!在NavigationMode.New中,我使用e.parameter获得一个string对象。toString()方法。这就是全部。比如'formid=e参数。字符串();'