Frage

Ich bin den Aufbau einer GPS-bezogenen Anwendung, die zeigt die Koordinaten unter anderem Berechnungen. Meine Demo-Code ist Setup, um die Ereignisse zu schießen jede Sekunde.

Jedes Mal, wenn ich die Haupt-Seite UI aktualisieren (sagen wir, ein Textfeld mit dem berechneten Latitude), es funktioniert gut.

Das Problem ist, wenn ich auf „Streifen“ von einer Seite zur anderen Seite versuchen, die Seite zu wechseln. Während in den Prozess der „Ausklopfen“, wenn das Textfeld zu aktualisieren war, springt er auf die Hauptseite zurück in Sicht.

Art hart im Text ohne Video zu erklären. Aber stellen Sie Click-n-holding, und draging der Panoramabild nur ein wenig - sagen wir, auf der nächsten Seite spähen, aber noch nicht spiegeln. Nun, wenn die Textbox während dieser Zeit zu aktualisieren ist, dann werden Sie Ihr Maus-Click-Hold lösen, und es würde auf die Hauptseite zurück springen.

Wenn Sie auf die nächste Seite zu tun bekommen, bleibt es und ich kann den Überlauf Aktualisierung der vorherigen Seite sehen. Keine große Sache gibt. Aber es ist nur versucht, auf die nächste Seite zu gelangen.

Ich bin neu in WP7 / Silverlight, also habe ich versucht, den Dispatcher zu verwenden, um die Dinge besser reagieren. Egal, was ich tun (der Dispatcher oder nicht), geschieht dies immer. Also, ich bin zu raten, dies hat mit der Benutzeroberfläche zu tun aktualisiert.

Ein kleiner Code immer hilft:

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;

}

Wenn eine dieser Textfelder aktualisiert werden, wird der Bildschirm „springt“ zurück auf die Hauptseite. Art eine schlechte Erfahrung gemacht.

Vielleicht ist das normal? Gibt es ein Ereignis einhaken zu wissen, dass der Benutzer auf „Schlitten“ versucht, auf die nächste Seite?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Nun, das fühlt sich wie ein Hack. Aber ich habe die Verzögerung ich durch Einhaken in einigen Veranstaltungen wollte. Wenn es andere Ereignisse sollte ich (zum Beispiel mousedown- / mouseup) verwenden, lassen Sie es mich wissen. Auch dies ist ein Hack, aber funktioniert.

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

Alles, was ich jetzt tun müssen, ist die isChangingPage boolean in meinem Code überprüfen. Und es Ereignisse passieren, etc.

Andere Tipps

Ich würde vermuten, dass, wenn Sie Satz .Text auf alle diejenigen Objekte direkt sie den Fokus erhalten (oder so ähnlich).

Versuchen Sie Databinding mit den Werten zu setzen.
Ich tue dies erfolgreich den Text der Kontrollen auf PanoramaItems zu aktualisieren, die nicht sichtbar sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top