Question

Je construis une application liée GPS qui affiche les coordonnées entre autres calculs. Mon code de démonstration est configuré pour tirer les événements toutes les secondes.

Chaque fois que je mets à jour l'interface principale de la page (par exemple, une zone de texte avec la latitude calculée), il fonctionne très bien.

Le problème est de savoir si je tente de « film » d'un côté à l'autre côté, pour changer la page. Alors que dans le processus de « feuilletant », si la zone de texte a été mise à jour, il saute la page principale en arrière en vue.

Un peu difficile à expliquer dans le texte sans vidéo. Mais imaginez un clic-n-holding et draging l'écran panoramique juste un peu - disons, pour avoir un aperçu de la page suivante, mais pas renversant encore. Eh bien, si la zone de texte a été mise à jour au cours de cette période, vous perdriez votre souris clic-attente, et il serait revenir en arrière à la page principale.

Une fois que vous obtenez de la page suivante, il reste et je peux voir la mise à jour de trop-plein de la page précédente. Pas grand-chose là-bas. Mais il est juste essayer d'arriver à cette page suivante.

Je suis nouveau WP7 / Silverlight, donc j'ai essayé d'utiliser le Dispatcher pour rendre les choses plus sensibles. Peu importe ce que je fais (en utilisant le Dispatcher ou non), cela se produit toujours. Alors, je devine que cela a à voir avec l'interface utilisateur mise à jour.

Un peu de code aide toujours:

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;

}

Lorsque l'une de ces zones de texte sont mis à jour, l'écran « saute » Retour à la page principale. Une sorte de mauvaise expérience.

Peut-être est normal? Y at-il un événement pour accrocher INTO pour savoir que l'utilisateur tente de « glisser » à la page suivante?

Merci à l'avance.

Était-ce utile?

La solution

Eh bien, cela se sent comme un hack. Mais je suis le retard que je voulais en accrochant dans certains événements. S'il y a d'autres événements que je devrais utiliser (par exemple mousedown / mouseup), laissez-moi savoir. Encore une fois, c'est un hack mais fonctionne.

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;
    });
}

Tout ce que je dois faire maintenant vérifier le booléen isChangingPage dans mon code. Et passer à des événements, etc.

Autres conseils

Je suppose que lorsque vous définissez .Text sur tous les objets directement qu'ils reçoivent mise au point (ou quelque chose de similaire.)

Essayez d'utiliser databinding pour définir les valeurs.
Je le fais de mettre à jour avec succès le texte des contrôles sur PanoramaItems qui ne sont pas visibles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top