1

PhoneApplicationPage インスタンスをクラスライブラリに渡し、このクラスライブラリにユーザーコントロールをポップアップします。戻るボタンを押すと、アプリケーション全体が終了します。昨日、アプリケーションで問題を解決しましたが、このクラスライブラリのケースではメソッドを使用できません。イベント (BackKeyPress) をサブスクライブしようとしましたが、VS2012 は "parent_BackKeyPress" "System.EventHandler" オーバーライドを示し、デリゲートは一致しません。確認しました、一致しています。

PhoneApplicationPage mContext=...; mContext.BackKeyPress += 新しい EventHandler(parent_BackKeyPress); void parent_BackKeyPress(CancelEventArgs e) { ppChangePIN.IsOpen = false; Application.Current.RootVisual.Visibility = Visibility.Visible; }

ここで何か間違っていますか?さらに、クラスライブラリでナビゲーションサービスを使用できますか? 以下のようにクラスライブラリで作成されたページに移動する前にこれを行いましたが、クラッシュしてしまいます。クラスライブラリでページを使用できないと言う人もいますが、代わりに Popup(usercontrol) を使用する必要があります。mContext.NavigationService.Navigate(new Uri("/ChangePINPage.xaml", UriKind.Relative));

4

1 に答える 1

1

私はそれを成功させました:

// or some other method of accessing the current page
// - but via Application, to which you have access also in class library
var currentPage = (PhoneApplicationPage)((PhoneApplicationFrame)Application.Current.RootVisual).Content;
currentPage.BackKeyPress += (sender, args) =>
    {
        // Display dialog or something, and when you decide not to perform back navigation:
        args.Cancel = true;
    };

もちろん、CurrentPage がメイン ページである場合にのみ、このコードが実行されるようにする必要があります。

クラス ライブラリでも Pages を使用します。クラス ライブラリで NavigationService を使用できます。たとえば、上記のように取得した現在のページから取得できます ( currentPage.NavigationService)。または、PhoneApplicationFrame の Navigate メソッドを使用できます。

((PhoneApplicationFrame)Application.Current.RootVisual)
    .Navigate(
        new Uri(
            "/ClassLibraryName;component/SamplePage.xaml", 
            UriKind.Relative));

"/SamplePage.xaml" のような短い Uris はアプリケーション プロジェクトで機能するため、クラス ライブラリ内のページに移動するには、"/ClassLibraryName;component/SamplePage.xaml" という完全な場所を指定する必要があります。

ただし、アプリケーションがメッセージ ボックスを表示して終了を停止することを選択した場合、次のように認定に合格しないことに注意してください ( Windows Phone の技術認定要件から)。

5.2.4.2 – 戻るボタン: 最初の画面

アプリの最初の画面から [戻る] ボタンを押すと、アプリを閉じる必要があります。

于 2013-10-04T09:17:32.307 に答える