我正在开发一个使用旧版WP7 Microsoft.Phone.Controls.Maps.Map / Bing Map控件的Windows Phone应用程序。
地图图块正在从本地源提供,因此应用程序不需要网络连接即可工作。不幸的是,地图控件坚持显示“无法联系服务器。请稍后再试”。离线时在地图上留言。
有没有人知道删除/隐藏此消息的方法?
万一你好奇 - 我正在开发一个WP8应用程序,但使用折旧的WP7 Bing地图控件,因为新的WP8地图控件没有提供替换Bing基本地图的方法。
答案 0 :(得分:5)
我认为这可能更适合你:
void YourPage_Loaded(object sender, RoutedEventArgs e)
{
m_Map.ZoomLevel = 11;
m_Map.LayoutUpdated += m_Map_LayoutUpdated;
}
void m_Map_LayoutUpdated(object sender, EventArgs e)
{
if (!isRemoved)
{
RemoveOverlayTextBlock();
}
}
void RemoveOverlayTextBlock()
{
var textBlock = m_Map.DescendantsAndSelf.OfType<TextBlock>()
.SingleOrDefault(d => d.Text.Contains("Invalid Credentials") ||
d.Text.Contains("Unable to contact Server"));
if (textBlock != null)
{
var parentBorder = textBlock.Parent as Border;
if (parentBorder != null)
{
parentBorder.Visibility = Visibility.Collapsed;
}
isRemoved = true;
}
}
您必须包含LinqToVisualTree
类,downloaded from here。
这是original post
答案 1 :(得分:0)
您可以按照this post中的说明自行处理每个实例的LoadingError
事件,也可以自己扩展Map
控件。然后,您可以删除包含错误消息的图层,以便它不会显示给用户。
public partial class CachedMap : Map
{
public CachedMap() : base()
{
base.LoadingError += (s, e) =>
{
base.RootLayer.Children.RemoveAt(5);
};
}
}
答案 2 :(得分:0)
我知道这是一个非常古老的主题,但无论如何......
您可以按建议@keyboardP收听LoadingError
事件,在可视树中搜索LoadingErrorMessage
控件,然后只需将其隐藏。
Map.LoadingError += MapOnLoadingError;
private void MapOnLoadingError(object sender, LoadingErrorEventArgs e)
{
var errorMessage = Map.FindChildOfType<LoadingErrorMessage>();
errorMessage.Visibility = Visibility.Collapsed;
}