2010-12-13 48 views
2

当我拖动或缩放时,我的bing地图应用程序最终崩溃。在仿真器和设备上测试。WP7 - Bing地图 - 我如何处理MapItemsControl上的多个图钉? - 当前崩溃的应用程序

我已经安装了10月份的更新。

MapItemsControl绑定到ObservableCollection。 应用程序启动时,引脚已加载并可见。

在排除故障时,我确定如果地图上的图钉在同一个普通区域中,应用程序不会崩溃。例如,

addPin("40.78184126814031", "-73.97712707519532");  
addPin("40.74569634433956", "-73.96717071533204");  
addPin("40.7117682299881", "-74.0125322341919");  
addPin("40.75777392583087", "-73.96950960159302"); 

但是,如果引脚分散 - 当用户放大到一个特定引脚和/或拖动地图时,应用程序崩溃。例如,

addPin("42.35960626034072", "-71.09212160110473");  
addPin("51.388066116760086", "30.098590850830067");  
addPin("48.17972265679143", "11.54910385608672");  
addPin("40.28802528051879", "-76.65668606758117"); 

不知道如果项目代码是必要的 - 我假设有一些概念,我只是不知道。

任何建议 - 我都耳朵。 下面的堆栈跟踪。

感谢

Unspecified error 
    at MS.Internal.XcpImports.CheckHResult(UInt32 hr)  
    at MS.Internal.XcpImports.UIElement_HitTestPoint(UIElement element, Point ptHit)  
    at System.Windows.UIElement.HitTest(Point point)  
    at System.Windows.Media.VisualTreeHelper.FindElementsInHostCoordinates(Point intersectingPoint, UIElement subtree)  
    at Microsoft.Phone.Controls.Maps.Core.TouchHelper.<InputHitTest>d__0.MoveNext()  
    at Microsoft.Phone.Controls.Maps.Core.TouchHelper.HitTestAndRaiseDownEvent(UIElement root, TouchPoint touchPoint)  
    at Microsoft.Phone.Controls.Maps.Core.TouchHelper.TouchFrameReported(Object sender, TouchFrameEventArgs e)  
    at System.Windows.Input.Touch.OnTouch(Object sender, TouchFrameEventArgs e)  
    at MS.Internal.JoltHelper.RaiseEvent(IntPtr target, UInt32 eventId, IntPtr coreEventArgs, UInt32 eventArgsTypeIndex) 

认为最好包括代码 - 运行这个和崩溃的应用程序缩放 - 感谢

PINDATA类

namespace BugCrash.models 
{public class PinData{public GeoCoordinate PinLocation { get;set; }}} 

MainPage.xaml.cs中

namespace BugCrash 
{ 
    public partial class MainPage : PhoneApplicationPage 
    { 
     private ObservableCollection<PinData> _pinsA = new ObservableCollection<PinData>(); 
     public ObservableCollection<PinData> PinsA { get { return this._pinsA; } } 

     // Constructor 
     public MainPage() 
     { 
      InitializeComponent(); 
      this.DataContext = this; 
      myMap.Center = new GeoCoordinate(40.74569634433956, -73.96717071533204); 
      myMap.ZoomLevel = 4; 
      MessageBox.Show(loadAPins_fromString()); 
     } 

     //ADD PIN TO COLLECTION 
    private void addPin(String lat, String lon) 
    { 
     PinData tmpPin; 
     tmpPin = new PinData() { PinLocation = new GeoCoordinate(System.Convert.ToDouble(lat), System.Convert.ToDouble(lon)) }; 
     _pinsA.Add(tmpPin); 
    }  
     //LOAD PINS ONE BY ONE 
     private string loadAPins_fromString() 
     { 
      //BAD 
      addPin("42.35960626034072", "-71.09212160110473"); 
      addPin("51.388066116760086", "30.098590850830067"); 
      addPin("48.17972265679143", "11.54910385608672"); 
      addPin("40.28802528051879", "-76.65668606758117"); 
      return "A PINS LOADED - STRING"; 
     } 
    } 
} 

MainPage.xaml中

<phone:PhoneApplicationPage 
    x:Class="BugCrash.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    SupportedOrientations="Portrait" Orientation="Portrait" 
    shell:SystemTray.IsVisible="False" 
    xmlns:my="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps"> 

    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <!--RESOURCES--> 
     <Grid.Resources> 
      <my:ApplicationIdCredentialsProvider ApplicationId="XX" x:Key="MyCredentials"/> 
     </Grid.Resources> 
     <my:Map Height="768"    
       Name="myMap" 
       VerticalAlignment="Top" Width="480" 
       CredentialsProvider="{StaticResource MyCredentials}"> 
      <my:Map.Mode> 
       <my:AerialMode ShouldDisplayLabels="True" /> 
      </my:Map.Mode> 

      <my:MapItemsControl 
        x:Name="GroupAPins" 
        ItemsSource="{Binding PinsA}"     
        > 
       <my:MapItemsControl.ItemTemplate> 
        <DataTemplate> 
         <my:Pushpin Location="{Binding PinLocation}" Width="60" Height="55" Content="PIN"> 
         </my:Pushpin> 
        </DataTemplate> 
       </my:MapItemsControl.ItemTemplate> 
      </my:MapItemsControl> 
     </my:Map> 
    </Grid> 
</phone:PhoneApplicationPage> 

回答

5

我不得不去微软得到这个答案。 原来地图控制中存在缺陷。 为了解决这个错误 - 动态加载bing map控件。

变化如下,

public MainPage() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     //Create a map. 
     Map MyMap = new Map(); 
     MyMap.CredentialsProvider = new ApplicationIdCredentialsProvider("XX"); 

     //Remove the List of items from the resource and add it to the map 
     this.LayoutRoot.Resources.Remove("GroupAPins"); 
     MyMap.Children.Add(GroupAPins); 

     MyMap.Center = new GeoCoordinate(40.74569634433956, -73.96717071533204); 
     MyMap.ZoomLevel = 5; 

     //Add the map to the content panel. 
     ContentPanel.Children.Add(MyMap); 
     loadAPins_fromString(); 
    } 

和XAML,

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <!--RESOURCES--> 
    <Grid.Resources> 
     <DataTemplate x:Key="LogoTemplate"> 
      <my:Pushpin Location="{Binding PinLocation}" /> 
     </DataTemplate> 
     <my:MapItemsControl x:Name="GroupAPins" 
        ItemTemplate="{StaticResource LogoTemplate}" 
        ItemsSource="{Binding PinsA}"> 
     </my:MapItemsControl> 
    </Grid.Resources> 
    <Grid x:Name="ContentPanel" Grid.Row="0" Margin="12,0,12,0"/> 
</Grid> 
+0

没有帮助我...仍然我的应用程序崩溃。 – Praneeth 2011-04-25 00:52:36

4

唉唉代码编写。 原来,我可以通过删除图钉的宽度和高度来防止应用程序崩溃。

微软解决方案没有包括图钉宽度和高度 - 所以我认为动态创建地图控件是答案 - 但增加了宽度和高度 - 与我的原始应用程序相同的崩溃。

我需要将我的代码更改回XAML中的地图控件的原始版本 - 并删除图钉宽度和高度以查看它是否可以解决这两个版本 - 但这似乎是问题 - 我的应用程序现在是运行良好 - 动态创建的地图控制 - 没有宽度或高度的图钉。

无论如何 - 希望这可以帮助某人。

-D

+0

我刚刚让我的应用程序抛出此异常。我没有设置图钉的宽度或高度,虽然图钉确实有按钮作为BorderThickness =“0”Padding =“0”设置的子控件。 – 2011-02-16 00:50:31