5

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

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

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

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

4

3 回答 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可以从这里下载的类女巫。这是原始帖子

于 2013-06-07T14:33:53.593 回答
0

您可以按照本文LoadingError所述处理每个实例的事件或自行扩展Map控件。然后,您可以删除包含错误消息的图层,以便它不会显示给用户。

public partial class CachedMap : Map
{
    public CachedMap() : base()
    {
        base.LoadingError += (s, e) =>
        {
            base.RootLayer.Children.RemoveAt(5);
        };
    }
}
于 2013-06-07T10:58:49.250 回答
0

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

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

Map.LoadingError += MapOnLoadingError;

private void MapOnLoadingError(object sender, LoadingErrorEventArgs e)
{
    var errorMessage = Map.FindChildOfType<LoadingErrorMessage>();
    errorMessage.Visibility = Visibility.Collapsed;
}
于 2015-05-05T17:58:36.527 回答