1

私のアプリ(「空白のアプリ」テンプレートに基づいてこの勇敢な新しい世界に入った)が期待どおりに機能しない理由を特定しようとしています(http://stackoverflow.com/questions/14467756/why-would-my -event-handler-not-get-called)、新しい空白のプロジェクトを開始し、次にMainPageを削除して、大きく離れたページに敬意を表して(そして、うなずいて)MainPageという名前の新しいBasic(空白ではない)ページを追加しました伝統と怠惰-そのため、そのページに移動するapp.xaml.csのコードを変更する必要はありません)。

空白のアプリは、次のように元のMainPage.xaml.csを作成しました(自動生成されたコメントは省略されています)。

namespace AsYouWish
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }
    }
}

... BasicPage(BlankPageではなく)に置き換えたところ、次のように生成されました。

namespace AsYouWish
{
    public sealed partial class MainPage : AsYouWish.Common.LayoutAwarePage
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
        }

        protected override void SaveState(Dictionary<String, Object> pageState)
        {
        }
    }

したがって、基本ページはLoadState()とSaveState()を取得しますが、空白ページのMainPageはOnNavigatedTo()を取得します。基本ページにもOnNavigatedTo()イベントがないのはなぜですか?すべてのページがナビゲートされる可能性があるように見えます(そしてそこからですが、そのイベントはオプション/不要である可能性が高いと私は見ることができます)。

4

1 に答える 1

5

これは、使用されているページテンプレートの問題です。OnNavigatedTo仮想メソッドはクラスに実装されているPageため、仮想メソッドから直接または間接的に継承された任意のクラスでオーバーライドできます。唯一の違いは、に使用されるテンプレートにはMainPage.xaml.csすでに空のOnNavigatedToメソッドが含まれているのに対し、BasicPageテンプレートには含まれていないことです。

次のコードを追加することで、メソッドをオーバーライドすることを妨げるものは何もありません。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    // add you own code here
}

通話を続けるようにしてください。そうしないと、( /を有効にする)base.OnNavigatedTo(e)ですでに実装されている機能が失われます。LayoutAwarePageLoadStateSaveState

わからない場合は、VisualStudioのクラスにオーバーライドを追加するのは非常に簡単です。スペースを入力して押すだけoverrideで、クラスでオーバーライドできるすべてのメソッドを含むドロップダウンが開きます。それらの1つを選択すると、上記の回答に含めたものと同じように、完全な空のメソッドがクラスに追加されます。

于 2013-01-24T05:56:16.367 に答える