2010-10-27 79 views
5

我正在構建與其他計算顯示座標的GPS相關應用程序。我的演示代碼設置爲每秒觸發事件。爲什麼WP7全景頁面在更新時跳回來?

無論何時我更新主頁面UI(例如,帶有計算出的緯度的文本框),它都可以正常工作。

問題是如果我試圖從一側「輕彈」到另一側,改變頁面。在「輕彈」過程中,如果要更新文本框,則會將主頁面跳回到視圖中。

很難在沒有視頻的文本中解釋。但是,想象一下點擊 - 握住,然後略微畫一個全景畫面 - 比如說,看一看下一頁,但不能翻動。那麼,如果在這段時間內要更新文本框,那麼您將不再需要鼠標點擊,而是跳回到主頁面。

一旦你到達下一頁,它會保持,我可以看到從上一頁的溢出更新。那裏沒什麼大不了的。但它只是試圖進入下一頁。

我是WP7/Silverlight的新手,所以我一直在嘗試使用Dispatcher來提高響應速度。無論我做什麼(使用Dispatcher或不),總會發生這種情況。所以,我猜這與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; 

} 

當這些文本框的更新,屏幕上顯示「跳」回主畫面。一種不好的經歷。

也許這是正常的?知道用戶試圖「滑動」到下一個頁面時是否有事件需要涉及?

在此先感謝。

回答

1

好吧,這感覺就像一個黑客。但是我通過吸引一些事件而得到了我想要的延遲。如果有其他事件我應該使用(例如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布爾值。並將它傳遞給事件等

1

我猜想,當你在所有這些對象設置.Text直接它們接收焦點(或類似的東西。)

嘗試使用數據綁定設置的值。
我這樣做可以成功更新PanoramaItems上不可見的控件文本。

相關問題