【Silverlight】 Bing Maps开发应用与技巧三:Bing Maps Silverlight Control2010-11-12 博客园 Beniao【Silverlight】 Bing Maps开发应用与技巧三:Bing Maps Silverlight Control的离线开发我相信大多数使用Bing Maps开发的朋友都见过如下的画面,就是当我们在Bing Maps的时候,将开发KEY填写错误导致用户授权验证失败出现的下图提示错误。

使用Bing Maps Silverlight Control开发的缺点就在于它默认是使用的微软自己提供的在线地图数据,而且Bing Maps Silverlight Control还与开发者账号进行绑定才能正常使用,如果开发KEY填写错误或是不填写开发KEY就会出现上图的提示。实际上这个验证失败的提示信息是可以被屏蔽的,我们同样是可以使用Bing Maps Silverlight Control来做我们的离线(不使用微软的地图数据,不通过用户开发KEY验证)开发的。通过仔细分析可知道,我们无论是做有限还是离线,本质上没有多大的区别,不同就是所加载的地图数据不同而已,要解决加载不同的地图数据完全可以通过自定义TileSource实现。另外还要解决一个问题,就是在没有通过开发KEY验证的情况下如何把错误提示图层给干掉,也就是删除或屏蔽错误提示图层。实际开发中我们却无法直接将错误提示层给屏蔽掉,只有通过其他间接的方式来处理。仔细查阅API可以发现,Bing Maps Silverlight Control的Map控件具有一个LoadError的事件,我们可以在此事件中动一些手脚,来把可恶的错误提示层给干掉。通过Reflector反编译可以发现LoadError事件的处理代码:
private void Map_LoadingError(object sender, LoadingErrorEventArgs e)
{
if (this.loadingErrorMessage == null)
{
this.loadingErrorMessage = new LoadingErrorMessage();
base.RootLayer.get_Children().Add(this.loadingErrorMessage);
}
if (e.get_LoadingException() is UriSchemeNotSupportedException)
{
this.loadingErrorMessage.SetUriSchemeError(base.Culture);
}
else if (e.get_LoadingException() is ConfigurationNotLoadedException)
{
this.loadingErrorMessage.SetConfigurationError(base.Culture);
}
else if (e.get_LoadingException() is CredentialsInvalidException)
{
this.loadingErrorMessage.SetCredentialsError(base.Culture);
}
}