地图控件SetView仅适用于页面的首次加载

时间:2013-01-06 17:12:50

标签: c# silverlight windows-phone-7

我在WP7应用程序中使用的Bing Maps控件存在问题。

当我导航到带有地图控件的页面时,它会启动GeoCoordinateWatcher。当GeoCoordinateWatcher为我提供一些位置数据时,它会调用SetView()方法将地图置于当前位置的中心位置。 ApplicationBar上还有一个按钮,它也会启动GeoCoordinateWatcher

现在,问题是,当我第一次导航到此页面时,一切正常:GeoCoordinateWatcher启动,一段时间后给我一个位置数据,在我需要时调用SetView()和地图中心它也。与按钮相同。

但是,如果按“返回”按钮返回主页,然后再次尝试导航到地图页面,SetView()将停止工作。在调试过程中,我看到它周围的代码按预期工作,传递给SetView()的数据是正确的,但控件和更改视图的事件都没有发生。

我假设地图初始化可能有问题(或导航时处理),但我不知道在哪里挖掘。

修改 我已尝试直接更改Map.Center,但它的工作方式与SetView()完全不同:第一次导航到页面并且没有& #39;在其他时间工作。

编辑2: 好吧,它变得怪异了。在调试中,我看到我的地图中心实际上被设置为正确的值。但实际的控件显示了绝对不同的位置和我,移动地图,并没有改变我从代码中看到的值。

编辑3: 我已经向ApplicationBar添加了一个只调用SetView()的按钮,它可以正常工作。显然,由于SetView()事件发生而致GeoCoordinateWatcher.PositionChanged时出现问题。我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:0)

尝试使用map.Center = loc.CoOrdinates;

答案 1 :(得分:0)

我找到了解决方案。

在我的原始代码中,我已在页面构造函数中订阅了GeoCoordinateWatcher.Position属性更改事件:App.PropertyChanged += AtmInfoPageOnAppPropertyChanged

我所要做的就是将其移至OnNavigatedTo事件处理程序并将App.PropertyChanged -= AtmInfoPageOnAppPropertyChanged添加到OnNavigatedFrom事件处理程序。

我认为,问题在于保留订阅该事件的旧页面并不允许它被处理,同时也不允许新页面订阅同一事件,从而导致代码被调用为不同的页面和不同的地图控件而不是屏幕上显示的代码。