2011-01-14 11 views
0

私は2つの画像&を追加しました。それらのイベント(MouseButtonDown)を追加しました。 最初の画像がギャラリーを開くイベントを処理するとき。 2番目のイメージは開いているカメラのイベントを処理します。 ユーザーがギャラリーから自分のイメージを選択したとき、次のページに移動します。そのナビゲート。しかし、ナビゲーション処理が完了する前に、MainPage &が表示され、次のページに移動します。ユーザーがギャラリーから画像を選んだら、メインページを表示したくなかった。 Plzヘルプ。 ありがとうございます。PhotoChooserTask + Navigation

公共部分クラスのメインページ:PhoneApplicationPageあなたはフォトギャラリーやカメラのように、チューのいずれかを使用私の知る限り、アプリケーションが起動するとき、それは裏ページあなたにそれを取るに

{ 
    PhotoChooserTask objPhotoChooser; 
    CameraCaptureTask cameraCaptureTask; 

    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 

     objPhotoChooser = new PhotoChooserTask(); 
     objPhotoChooser.Completed += new EventHandler<PhotoResult>(objPhotoChooser_Completed); 

     cameraCaptureTask = new CameraCaptureTask(); 
     cameraCaptureTask.Completed += new EventHandler<PhotoResult>(objCameraCapture_Completed);   
    } 

    void objPhotoChooser_Completed(object sender, PhotoResult e) 
    { 
     if (e != null && e.TaskResult == TaskResult.OK) 
     { 
      //Take JPEG stream and decode into a WriteableBitmap object     
      App.CapturedImage = PictureDecoder.DecodeJpeg(e.ChosenPhoto); 

      //Delay navigation until the first navigated event 
      NavigationService.Navigated += new NavigatedEventHandler(navigateCompleted); 
     } 
    } 


    void navigateCompleted(object sender, EventArgs e) 
    { 
     //Do the delayed navigation from the main page 
     this.NavigationService.Navigate(new Uri("/ImageViewer.xaml", UriKind.RelativeOrAbsolute)); 
     NavigationService.Navigated -= new NavigatedEventHandler(navigateCompleted); 
    } 


    void objCameraCapture_Completed(object sender, PhotoResult e) 
    { 
     if (e.TaskResult == TaskResult.OK) 
     { 
      //Take JPEG stream and decode into a WriteableBitmap object     
      App.CapturedImage = PictureDecoder.DecodeJpeg(e.ChosenPhoto); 

      //Delay navigation until the first navigated event 
      NavigationService.Navigated += new NavigatedEventHandler(navigateCompleted);   
     } 
    } 


    protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
    { 
     e.Cancel = true; 
    } 


    private void image1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     objPhotoChooser.Show(); 
    } 


    private void image2_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     cameraCaptureTask.Show(); 
    } 

答えて

1

それを残した。私はこれを回避する方法はないと思います。あなたがしなければならないのは、メインページのコードでActivatingイベントをキャッチし、そこから目的のページに移動することです。 イメージをメインページからターゲットページにどのように渡すかが完全にはわかりません。この値を格納するためのナビゲーションサービスのプロパティがあるようには見えません。しかし、アプリケーション全体の変数ModelViewに設定することもできますし、分離保存領域に格納することもできます。

0

これを回避するには、中間の空白ページに移動し、その中間ページでタスクを起動させることができます。タスクが完了すると、新しいページに通常通りナビゲートでき、この空白のページだけが転送中に表示されます。

0

Chrisさんは、タスクの中にはアプリから離れて移動するものがあります(効果的に消滅させる)、ユーザーがタスクから戻ったときにアプリケーションを再度アクティブにすることは間違いありません。カメラの場合、これは特に難しいです。私の知る限り、カメラから戻ってくるときを検出する簡単な方法はありません。また、カメラがデバッガやZuneソフトウェアに接続されていると動作しません(少なくともこれは私のHTCサラウンドでも当てはまります)。

私のWP7 Barcode Scanningアプリケーションでは、PhoneApplicationServiceクラスのフラグを使用して、ナビゲーションイベントがどこから来たのかを追跡しました。ような何か:

PhoneApplicationService.Current.State["ReturnFromSampleChooser"] = true;

あなたは、あなたのメインページのPhoneApplicationPage_LoadedOnNavigatedTo方法でこれらのフラグをチェックし、必要に応じて目的のページにリダイレクトすることができます。フラグがクリアされていることを確認してください。ナビゲーションにループが発生しないよう注意してください。アプリの認証が失敗する可能性があります(バックボタンは常に正しく動作する必要があります)。

PhoneApplicationServiceを使用してカメラとセット/クリアフラグを使用する例については、Silverlight ZXing Barcode Libraryのソースコードを参照してください。フルソースhereをダウンロードするか、files onlineを参照してください。