2010-10-27 80 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上不可见的控件文本。

相关问题