6

ページが Silverlight でナビゲートされると、このメソッドをオーバーライドできます。

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

には、次のように定義されNavigationEventArgsた列挙があります。NavigationMode

public enum NavigationMode
{
    New = 0,
    Back = 1,
    Forward = 2,
    Refresh = 3,
}

しかし、呼び出すとe.NavigationMode常にスローされますNotImplementedException

ユーザーがブラウザの進む/戻るボタンを押したためにページがナビゲートされていることをSilverlightで検出する方法はありますか?

私が達成しようとしているのは、ユーザーが戻るボタンを押したときに保持できるある種の状態です。

たとえば、データグリッドに顧客のリストを表示している顧客ページがあるとします。ユーザーは顧客を選択でき、その顧客のすべての注文を示す詳細ビューがあります。注文アイテム内で、別のページである注文の出荷履歴に移動するハイパーリンク リンクをクリックできるようになりました。ユーザーが戻るボタンを押すと、顧客ページに戻り、表示していた顧客を自動的に選択したいと考えています。これはまったく可能ですか?

フラグメントナビゲーション機能も試してみました

NavigationService.Navigate(new Uri("#currentcustomerid=" 
       + customer.Id.ToString(), UriKind.Relative));

顧客の選択が変更されたときに、ユーザーが顧客ページでさまざまな顧客をクリックすると、履歴に追加される項目が多すぎます。

編集

オーバーライドできるメソッドもあります

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
}

BugFinder の回答で示されているように、NavigationService.Navigating イベントを処理するのと同じです。このメソッドでは、戻るボタンまたは進むボタンを押したときにe.NavigationMode常に戻ります。Newこのメソッドが戻るのBackは、明示的に呼び出したときだけですNavigationService.GoBack()

4

4 に答える 4

1

public enum NavigationMode 
{ 
    New = 0, 
    Back = 1, 
    Forward = 2, 
    Refresh = 3, 
} 

Navigating イベントに適用されます。

私が行った場合

_ns.Navigating += ns_Navigating;
        void ns_Navigating(object sender, NavigatingCancelEventArgs e)
        {

            if (SecurityCheck(e.Uri.OriginalString)) return;
            e.Cancel = true;
            ShowError("You are not authorised to view this page");
        }

e.NavigationMode が設定されていることがわかります。あなたはそこであなたのテストをすることができますか?

于 2012-09-04T15:05:46.000 に答える
1

私の知る限り、箱から出してすぐに実行できる簡単な方法はないと思います。

あなたが達成しようとしていることは、 http: //ultimateframework.codeplex.comで作成したフレームワークを使用して簡単に実行できます。

私が行ったことは、Silverlight ナビゲーション フレームと Prism ナビゲーションを一緒にメッシュ化することです。そのため、Unity と Prism と mvvm フレンドリーが必要になります。

達成したいことは、次の方法でフレームワークを使用して実行できます

1) IsNavigationTarget を実装し、true を返します --> これにより、戻るときに同じインスタンスが保持されるため、選択/選択されたアイテムが保持されます。

2) onnavigatedto のジャーナルにアクセスして、どこから来たかを追跡します。たとえば、/item/1 が前のスタックだったので、アイテム 1 から戻るボタンが押されたことがわかります。

3)同じ結果を達成するために提供されたカスタムコントロール内に独自の戻る/進む/更新を実装することもできます(まだコードプレックスではありません)

実際に仕事でプロダクションコードに使用し、作成しましたので、お気軽にお試しください。そこにあるバージョンにはバグがあり、最新のビルドをリリースする時間はまだありませんが、必要な場合は更新します:)、私に連絡してください。

于 2012-09-05T03:33:37.390 に答える
1

どの顧客がアクティブかを示すコンテンツフレームを含むユーザーコントロールに変数を設定します。

ユーザー コントロールに contentframe の Navigated イベントのハンドラーを追加します。これを使用して、アクティブな顧客を示す変数を確認し (変数が null でない場合)、顧客を選択します。

于 2012-09-09T23:05:39.927 に答える
0

これはあなたが探しているものかもしれません:

http://jakkaj.wordpress.com/2008/09/08/control-silverlight-by-using-browser-back-and-foward-buttons/

于 2012-09-04T16:46:56.027 に答える