1

WP7 アプリケーションで使用している Bing Maps コントロールに問題があります。

マップ コントロールのあるページに移動すると、GeoCoordinateWatcher. 位置データがある場合は、現在の位置を地図の中心にGeoCoordinateWatcherするメソッドを呼び出します。を開始SetView()するボタンもあります。ApplicationBarGeoCoordinateWatcher

さて、問題は、私が最初にこのページに移動したとき、すべてが正常に機能することです。GeoCoordinateWatcher開始し、しばらくすると位置データが表示されSetView()、必要に応じて呼び出しと地図の中心も表示されます。ボタンも同様。

しかし、[戻る] ボタンを押してメイン ページに戻り、もう一度マップ ページに移動しようとすると、SetView()動作が停止します。デバッグでは、それを取り巻くコードが期待どおりに機能し、渡されたデータSetView()が正しいことがわかりますが、コントロールでは何も起こらず、ビューを変更するためのイベントも発生しません。

マップの初期化 (または移動時の破棄) に問題がある可能性があると想定していますが、どこを掘ればよいかわかりません。

編集: 私はMap.Center直接変更しようとしましたが、まったく同じようにはSetView()機能しません:ページが最初にナビゲートされたときは正常に機能し、それ以外の場合は機能しません。

編集2: わかりました、それは奇妙になります。デバッグ中に、マップの中心が実際に正しい値に設定されていることがわかります。しかし、実際のコントロールはまったく異なる場所を示しており、地図を動かしても、コードから見える値は変わりません。

編集 3: ボタンを追加しApplicationBarて呼び出すだけでSetView()、正常に動作します。どうやら、イベントSetView()発生の結果として呼び出すと問題が発生するようです。GeoCoordinateWatcher.PositionChangedどうすればそれを回避できますか?

4

2 に答える 2

0

使ってみてmap.Center = loc.CoOrdinates;

于 2013-01-07T06:44:35.377 に答える
0

私は解決策を見つけました。

GeoCoordinateWatcher.Position元のコードでは、ページ コンストラクターのプロパティ変更イベントをサブスクライブしました。App.PropertyChanged += AtmInfoPageOnAppPropertyChanged

私がしなければならなかったのは、それをイベント ハンドラーに移動し、OnNavigatedToイベント ハンドラーに追加App.PropertyChanged -= AtmInfoPageOnAppPropertyChangedすることだけOnNavigatedFromでした。

問題は、古いページをイベントにサブスクライブしたままにしておくと、それを破棄できず、同時に新しいページが同じイベントにサブスクライブできなかったため、コードが呼び出されたことだったと思います画面に表示されているものとは異なるページおよび異なるマップ コントロールに対して。

于 2013-01-07T13:29:22.047 に答える