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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top