首页 文章

离线时删除/隐藏Bing Map 离线消息

提问于
浏览
5

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

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

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

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

3 回答

  • 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

  • 0

    您可以按每个实例处理 LoadingError 事件,也可以自己扩展 Map 控件,如this post中所述 . 然后,您可以删除包含错误消息的图层,以便它不会显示给用户 .

    public partial class CachedMap : Map
    {
        public CachedMap() : base()
        {
            base.LoadingError += (s, e) =>
            {
                base.RootLayer.Children.RemoveAt(5);
            };
        }
    }
    
  • 0

    我知道这是一个非常老的线程,但无论如何......

    您可以按建议@keyboardP监听 LoadingError 事件,在可视树中搜索 LoadingErrorMessage 控件并简单地隐藏它 .

    Map.LoadingError += MapOnLoadingError;
    
    private void MapOnLoadingError(object sender, LoadingErrorEventArgs e)
    {
        var errorMessage = Map.FindChildOfType<LoadingErrorMessage>();
        errorMessage.Visibility = Visibility.Collapsed;
    }
    

相关问题