Perché la pagina di salto indietro WP7 panoramica durante l'aggiornamento?
-
26-09-2019 - |
Domanda
sto costruendo un'applicazione GPS-related che mostra le coordinate tra altri calcoli. Il mio codice demo è impostato per sparare gli eventi ogni secondo.
Ogni volta che aggiornare la pagina principale dell'interfaccia utente (ad esempio, una casella di testo con il Latitude calcolato), funziona benissimo.
Il problema è che se provo a "flick" da un lato verso l'altro lato, per cambiare pagina. Mentre nel processo di "sfogliare", se la casella di testo è stato quello di aggiornamento, salta sul retro pagina principale in vista.
Tipo di difficile da spiegare in testo senza un video. Ma immaginate click-n-holding, e trascinando lo schermo panoramico solo un po '- per esempio, per sbirciare nella pagina successiva, ma non ancora lanciando. Beh, se il testo è stato quello di aggiornare durante quel tempo, che ci si perde il mouse-click-hold, e sarebbe tornare indietro alla pagina principale.
Una volta che si ottiene alla pagina successiva, rimane e posso vedere l'aggiornamento trabocco dalla pagina precedente. Nessun grosso problema lì. Ma è solo cercando di arrivare a quella pagina successiva.
Sono nuovo di WP7 / Silverlight, così ho cercato di usare il Dispatcher per rendere le cose più reattivo. Non importa quello che faccio (usando il Dispatcher o no), questo accade sempre. Così, sto indovinando questo ha a che fare con l'interfaccia utente in fase di aggiornamento.
Un codice po 'aiuta sempre:
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;
}
Quando una di queste caselle di testo vengono aggiornati, la schermata "salta" tornare alla pagina principale. Una specie di brutta esperienza.
Forse questo è normale? C'è un evento da collegare in a sapere che l'utente sta cercando di "slide" alla pagina successiva?
Grazie in anticipo.
Soluzione
Bene, questo si sente come un hack. Ma ho avuto il ritardo volevo agganciando in alcuni eventi. Se ci sono altri eventi dovrei usare (per esempio mousedown / mouseup), fatemelo sapere. Ancora una volta, questo è un hack, ma funziona.
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;
});
}
Tutto ciò che devo fare ora è controllare il booleano isChangingPage nel mio codice. E passarlo agli eventi, ecc.
Altri suggerimenti
Direi che quando si .Text
serie su tutti quegli oggetti che stanno ricevendo direttamente messa a fuoco (o qualcosa di simile).
Provare a utilizzare l'associazione dati per impostare i valori.
Lo faccio con successo per aggiornare il testo dei controlli sulle PanoramaItems che non sono in vista.