地图控件SetView只在页面第一次加载时起作用
本文关键字:第一次 加载 起作用 控件 SetView 地图 | 更新日期: 2023-09-27 17:50:58
我在WP7应用程序中使用必应地图控件时遇到了一个问题。
当我导航到具有地图控件的页面时,它启动GeoCoordinateWatcher
。当GeoCoordinateWatcher
为我提供一些位置数据时,它调用SetView()
方法将地图居中于当前位置。在ApplicationBar
上也有一个按钮,也可以启动GeoCoordinateWatcher
。
现在,事情是,当我第一次导航到这个页面时,一切都很好:GeoCoordinateWatcher
开始,一段时间后给我位置数据,在我需要的时候调用SetView()
和地图中心。按钮也一样。
但是如果我按后退按钮回到主页,然后尝试再次导航到地图页面,SetView()
停止工作。在调试中,我看到围绕它的代码按预期工作,传递给SetView()
的数据是正确的,但是控件和更改视图的事件都没有发生。
我假设地图初始化(或处理导航)可能有问题,但我不知道在哪里挖掘。
编辑:我试过直接改变Map.Center
,它不以完全相同的方式工作,SetView()
不:它工作得很好,第一次页面导航到,不工作在其他时间。
编辑2:好吧,还有更奇怪的。在调试中,我看到映射的中心被设置为正确的值。但是一个实际的控件显示了完全不同的位置,而我,移动地图,不会改变我从代码中看到的值。
编辑3:我添加了一个按钮到ApplicationBar
,只是调用SetView()
,它工作得很好。显然,由于GeoCoordinateWatcher.PositionChanged
事件引发,当我调用SetView()
时出现问题。我怎么才能解决这个问题呢?
尝试使用map.Center = loc.CoOrdinates;
我找到解决办法了。
在我的原始代码中,我在页面构造函数中订阅了GeoCoordinateWatcher.Position
属性更改事件:App.PropertyChanged += AtmInfoPageOnAppPropertyChanged
我所要做的就是将其移动到OnNavigatedTo
事件处理程序,并将App.PropertyChanged -= AtmInfoPageOnAppPropertyChanged
添加到OnNavigatedFrom
事件处理程序。
我认为,问题在于保持旧页面订阅事件不允许它被处置,同时不允许新页面订阅相同的事件,从而导致代码被调用不同的页面和不同的地图控件,而不是显示在屏幕上。