2010-10-27 8 views
5

Sto costruendo un'applicazione relativa al GPS che mostra le coordinate tra altri calcoli. Il mio codice demo è configurato per far scattare gli eventi ogni secondo.Perché la pagina panoramica WP7 salta all'indietro durante l'aggiornamento?

Ogni volta che aggiorno l'interfaccia utente della pagina principale (ad esempio, una casella di testo con Latitude calcolato), funziona correttamente.

Il problema è se provo a "scorrere" da un lato all'altro per modificare la pagina. Durante il processo di "sfogliamento", se la casella di testo doveva essere aggiornata, la pagina principale viene nuovamente visualizzata.

Tipo di difficile da spiegare nel testo senza un video. Ma immagina il click-n-hold e trascina lo schermo panoramico solo un po ', per esempio, per sbirciare alla pagina successiva ma senza capovolgerlo. Bene, se la casella di testo dovesse essere aggiornata durante quel periodo, avresti perso il clic del mouse e ti sarebbe tornato alla pagina principale.

Una volta raggiunta la pagina successiva, rimane e posso vedere l'aggiornamento di overflow dalla pagina precedente. Nessun grosso problema lì. Ma sta solo cercando di arrivare a quella pagina successiva.

Sono nuovo di WP7/Silverlight, quindi ho cercato di utilizzare il Dispatcher per rendere le cose più reattive. Non importa quello che faccio (usando il Dispatcher o meno), questo succede sempre. Quindi, immagino che questo abbia a che fare con l'interfaccia utente aggiornata.

Un po 'di codice 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. Tipo di brutta esperienza.

Forse è normale? C'è un evento a cui aggrapparsi per sapere che l'utente sta cercando di "scivolare" alla pagina successiva?

Grazie in anticipo.

risposta

1

Bene, questo sembra un hack. Ma ho ottenuto il ritardo che volevo agganciando alcuni eventi. Se ci sono altri eventi che dovrei usare (ad esempio mouse/mouseup), fammi sapere. Di nuovo, 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 quello che devo fare ora è controllare booleano isChangingPage nel mio codice. E passarlo agli eventi, ecc

1

direi che quando si imposta .Text 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 correttamente per aggiornare il testo dei controlli su PanoramaItems che non sono in vista.

Problemi correlati