简单的方法
如果您只想设置最小比例和最大比例,则Map
该类具有MinScale
和MaxScale
属性。将您的代码替换为以下内容:
MyMapView.Map.MaxScale = 700;
MyMapView.Map.MinScale = 16500000;
艰难的路
你可能不需要这个!使用上面列出的简单方法,除非你有充分的理由去做更复杂的事情!
如果由于某种原因您真的想跟踪比例变化,然后自己更改比例,您应该以不同的方式进行。目前您正在收听PropertyChanged
,这太宽泛了。一个效果是,当比例更改时,您的事件处理程序运行,它执行异步缩放,在完成之前生成比例更改,它调用您的事件处理程序,执行异步缩放,在完成之前生成比例更改,它调用你的事件处理程序,它......我可以继续下去。字面上地。你的程序也会如此,除非你做出一些改变。
这是一种方法:
// Save a variable so you can invoke the EventHandler elsewhere
EventHandler navigationCompletedHandler = (sender, args) =>
{
var s = MyMapView.MapScale;
if (s < 500)
MyMapView.SetViewpointScaleAsync(700);
if (s > 16500000)
MyMapView.SetViewpointScaleAsync(16500000);
};
MyMapView.NavigationCompleted += navigationCompletedHandler;
// Invoke the above handler one time when the map first loads
EventHandler firstViewpointChangeHandler = null;
firstViewpointChangeHandler = (sender, args) =>
{
if (!double.IsNaN(MyMapView.MapScale))
{
MyMapView.ViewpointChanged -= firstViewpointChangeHandler;
navigationCompletedHandler.Invoke(null, null);
}
};
MyMapView.ViewpointChanged += firstViewpointChangeHandler;