Почему Panoramic PANORAMIC страница WP7 обратно при обновлении?

StackOverflow https://stackoverflow.com/questions/4029021

Вопрос

Я создаю приложение, связанное с GPS, которое отображает координаты среди других расчетов. Мой демо-код установлен, чтобы выстрелить события каждую секунду.

Всякий раз, когда я обновляю основную страницу UI (скажем, текстовое поле с расчетной широтой), он отлично работает.

Проблема в том, что если я пытаюсь «щедрость» с одной стороны на другую сторону, чтобы изменить страницу. Находясь в процессе «щедрости», если текстовое поле должно было обновить, он переходит на главную страницу обратно в поле зрения.

Вроде трудно объяснить в тексте без видео. Но представьте себе click-n-холдинг, и перетащив панорамный экран просто немного - скажи, чтобы заглянуть на следующую страницу, но пока не переворачивает. Ну, если TextBox должен был обновить в течение этого времени, вы потеряете удержание вашего щелчка мыши, и он перепрыгнул бы на главную страницу.

Как только вы доберетесь до следующей страницы, он остается, и я вижу обновление переполнения с предыдущей страницы. Нет большой сделки там. Но это просто пытается добраться до этой следующей страницы.

Я новичок в WP7 / Silverlight, поэтому я пытался использовать диспетчер, чтобы сделать все более отзывчивыми. Неважно, что я делаю (использую диспетчер или нет), это всегда происходит. Итак, я предполагаю, что это связано с обновлением UI.

Немного кода всегда помогает:

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;

}

Когда любой из этих текстовых ящиков обновляется, экран «прыгает» обратно на главную страницу. Вид плохого опыта.

Может быть, это нормально? Есть ли событие для того, чтобы зацепить, чтобы узнать, что пользователь пытается «скользить» на следующую страницу?

Заранее спасибо.

Это было полезно?

Решение

Ну, это чувствует себя как хак. Но я получил задержку, которую я хотел, зацепив некоторые события. Если есть другие события, я должен использовать (например, Mousedown / Tousup), дайте мне знать. Опять же, это хак, но работает.

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

Все, что мне нужно сделать сейчас, это проверьте ischangingPage Boolean в моем коде. И пропустите его к событиям и т. Д.

Другие советы

Я думаю, что когда вы установите .Text На всех этих объектах напрямую они получают фокус (или что-то подобное.)

Попробуйте использовать databinding, чтобы установить значения.
Я делаю это успешно, чтобы обновить текст элементов управления на панорамайтем, которые не рассматриваются.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top