为啥更新时WP7全景页面会跳回?

Posted

技术标签:

【中文标题】为啥更新时WP7全景页面会跳回?【英文标题】:Why does the WP7 Panoramic page jump back when updating?为什么更新时WP7全景页面会跳回? 【发布时间】:2010-10-27 00:06:36 【问题描述】:

我正在构建一个与 GPS 相关的应用程序,该应用程序在其他计算中显示坐标。我的演示代码设置为每秒触发一次事件。

每当我更新主页用户界面(例如,带有计算纬度的文本框)时,它都可以正常工作。

问题是如果我尝试从一侧“轻弹”到另一侧来更改页面。在“滑动”的过程中,如果文本框要更新,它会跳回到主页。

没有视频很难用文字解释。但是想象一下,按住单击,然后稍微拖动全景屏幕——比如说,偷看下一页但还没有翻动。好吧,如果在此期间要更新文本框,您将松开鼠标单击,它会跳回主页。

一旦您进入下一页,它就会停留,我可以看到从上一页更新的溢出。没什么大不了的。但它只是试图进入下一页。

我是 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),请告诉我。同样,这是一个 hack,但有效。

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 布尔值。并将其传递给事件等。

【讨论】:

【参考方案2】:

我猜当您直接在所有这些对象上设置 .Text 时,它们会接收焦点(或类似的东西。)

尝试使用数据绑定来设置值。 我成功地更新了不在视图中的 PanoramaItems 上的控件文本。

【讨论】:

以上是关于为啥更新时WP7全景页面会跳回?的主要内容,如果未能解决你的问题,请参考以下文章

当用户滚动时,在 WP7 上更改全景图的背景图像

我如何无法在 WP7 的全景视图中处理 selectionchange 事件?

全景标题绑定

为啥网站在手机端加载加载完成会跳回顶部?

为啥模拟位置会跳回真实位置

Windows Phone 8 全景布局