Почему при обновлении страница WP7 Panoramic возвращается назад? - PullRequest
5 голосов
/ 27 октября 2010

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

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

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

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

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

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

Небольшой код всегда помогает:

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;

}

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

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

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

Ответы [ 2 ]

1 голос
/ 27 октября 2010

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

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

1 голос
/ 27 октября 2010

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

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 в моем коде И передать это событиям и т. Д.

...