21

私は Windows 8 RTM と C#(VS 2012 RTM) を使用してメトロ アプリを開発しています。 概要:多言語対応のメトロ アプリを開発しています。ユーザーが言語を選択すると、以下のコードで第一言語をオーバーライドしています

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";

このコードを使用してページをリロードします

this.Frame.Navigate(this.GetType());

言語が「de」に変更されましたが、ページで「戻る」を押すと、前のページに移動するのではなく、同じページに移動します。前もって感謝します

4

2 に答える 2

16

これにより、ページが更新されます。

var _Frame = Window.Current.Content as Frame;
_Frame.Navigate(_Frame.Content.GetType());
_Frame.GoBack(); // remove from BackStack
  • OnNavigatingFrom()を処理すると、ページのデータと状態を保存できます。
  • OnNavigatingTo()を処理すると、ページのデータと状態をロードできます。

警告として、私のサンプルはページパラメータを考慮していません、あなたはそうする必要があるかもしれません。また、別の注意点として、私のサンプルはページを2回リロードします。ただし、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()); }
}
于 2013-01-09T21:16:25.980 に答える