なぜ、WP7パノラマページジャンプバックは時に更新しますか?
-
26-09-2019 - |
質問
私は、他の計算の中でのディスプレイ座標そのGPS関連のアプリケーションを構築しています。私のデモコードが毎秒イベントを発生するように設定されます。
私は、メインページを更新するたびにUI(、算出した緯度とテキストボックスを言う)、それがうまく動作します。
私は、ページを変更するには、一の側から他側に「フリック」にしようとすると、問題があります。テキストボックスが更新した場合、「フリック」の過程で、それがビューにメインページの背中をジャンプしながらます。
ハードの種類が映像なしのテキストで説明します。たとえば、次のページで覗き見するが、まだフリッピングではない - しかし、クリック-N-保持し、パノラマ画面を少しだけdraging想像してみてください。テキストボックスは、その時間中に更新するようにした場合さて、あなたはあなたのマウスクリックホールドを失うだろう、それはメインページに戻ってジャンプします。
あなたは、次のページに行くDOたら、は、それがままで、私は、前のページからのオーバーフローの更新を見ることができます。大したことないが。しかし、それだけでは、次のページを取得しようとしてます。
私はWP7 /シルバーに新たなんだので、私は物事をより敏感にするためにディスパッチャを使用しようとしてきました。私は何をすべきかに関係なく(ディスパッチャかどうかを使用して)が、これは常に起こります。だから、私はこれはUIが更新されているとしなければならない推測しています。
少しのコードでは、常に助けます:
void GeoWatcher_PositionChanged(object sender,
GeoPositionChangedEventArgs<GeoCoordinate> e)
{
Deployment.Current.Dispatcher.BeginInvoke(() => MyPositionChanged(e));
}
void MyPositionChanged(GeoPositionChangedEventArgs<GeoCoordinate> e)
{
var model = GeoProcessor.GetPosition(e.Position);
latitude.Text = model.Latitude;
longitude.Text = model.Longitude;
altitude.Text = model.Altitude;
accuracy.Text = model.Accuracy;
direction.Text = model.Direction;
speed.Text = model.Speed;
speedAvg.Text = model.SpeedAvg;
}
これらのテキストボックスのいずれかが更新されると、画面はメインページへ戻る「ジャンプ」。悪い経験の種類ます。
たぶんそれは正常ですか?ユーザーが次のページに「スライド」にしようとしていることを知ることににフックするイベントはありますか?
事前に感謝します。
解決
まあ、これはハックのように感じています。しかし、私はいくつかのイベントにフックして欲しかった遅延を得ました。私は(例えばマウスダウン/のmouseup)を使用しなければならない他のイベントがある場合、私に知らせてください。繰り返しますが、これはハックが、作品である。
bool isChangingPage = false;
bool isCompleting = false;
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
this.ManipulationStarted +=
new EventHandler<ManipulationStartedEventArgs>(MainPage_ManipulationStarted);
this.ManipulationCompleted +=
new EventHandler<ManipulationCompletedEventArgs>(MainPage_ManipulationCompleted);
}
void MainPage_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
isChangingPage = true;
}
void MainPage_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
if (isCompleting)
return;
isCompleting = true;
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Thread.Sleep(1000);
isChangingPage = false;
isCompleting = false;
});
}
すべての私が今しなければならないが、私のコードでisChangingPageブールをチェックしています。そして、イベントなどに渡します。
他のヒント
私はあなたがすべてのそれらのオブジェクトに.Text
を設定する際に、直接、彼らが焦点受けていることを推測したい(または類似した何かを。)
の値を設定するためにデータバインディングを使用してみてください。
私は正常にビューが表示されていないPanoramaItems上のコントロールのテキストを更新するには、この操作を行います。