我正在使用Windows 8 RTM和C#(VS 2012 RTM)开发metro应用程序,我遇到了页面重新加载, 任何人都可以解释我如何重新加载页面而不再导航到同一页面。 简介:我正在开发具有多语言支持的metro应用程序。当用户通过以下代码选择语言我覆盖主要语言时
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
并使用此代码重新加载页面
this.Frame.Navigate(this.GetType());
语言改为“de”,但当我在页面上按“返回”时导航同一页而不是导航到上一页。我想念一些事情,有人可以请你解释一下如何做到这一点。提前致谢
答案 0 :(得分:16)
这将刷新您的页面:
var _Frame = Window.Current.Content as Frame;
_Frame.Navigate(_Frame.Content.GetType());
_Frame.GoBack(); // remove from BackStack
作为警告,我的示例不考虑页面参数,您可能需要。 此外,另一个警告,我的样本重新加载您的页面两次。但是从BackStack中删除新条目需要GoBack()。与WP不同,Frame没有Refresh()。此外,BackStack没有Remove()。
<强>更新强>
我不再使用上述方法。我用这个:
public bool Reload() { return Reload(null); }
private bool Reload(object param)
{
Type type = this.Frame.CurrentSourcePageType;
if (this.Frame.BackStack.Any())
{
type = this.Frame.BackStack.Last().SourcePageType;
param = this.Frame.BackStack.Last().Parameter;
}
try { return this.Frame.Navigate(type, param); }
finally { this.Frame.BackStack.Remove(this.Frame.BackStack.Last()); }
}
答案 1 :(得分:1)
我不确定我完全明白你要做什么,所以这可能是错的。
通过在刷新页面时调用该行代码,您将创建当前类型的全新对象并导航到该对象,因此这不会保存用户在当前页面上所做的更改。 / p>
您使用的是任何类型的设计模式吗?对于这样的事情,我使用MVVM(使用MVVM光库),它实现了一个非常酷的导航服务,这将保持这样的东西。