离线时删除/隐藏Bing地图离线消息

时间:2013-06-05 10:42:38

标签: c# windows-phone-7 windows-phone-8 windows-phone bing-maps

我正在开发一个使用旧版WP7 Microsoft.Phone.Controls.Maps.Map / Bing Map控件的Windows Phone应用程序。

地图图块正在从本地源提供,因此应用程序不需要网络连接即可工作。不幸的是,地图控件坚持显示“无法联系服务器。请稍后再试”。离线时在地图上留言。

有没有人知道删除/隐藏此消息的方法?

万一你好奇 - 我正在开发一个WP8应用程序,但使用折旧的WP7 Bing地图控件,因为新的WP8地图控件没有提供替换Bing基本地图的方法。

3 个答案:

答案 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;
}