2013-03-27 5 views
5

Ich versuche, eine einfache Beispielanwendung zu erstellen, auf die ich später für Windows Phone 8 aufbauen kann. Ich möchte eine Bing-Map auf meiner MainPage.xaml erstellen Punkt (37.227700, -80422037), und bereits auf der Karte aufgefüllte Pins haben (nicht die, die der Benutzer hinzufügt, sondern nur Marker für bestimmte Orte, die ich auf Grundlage einiger dynamischer Daten vorfinde, die ich im Moment fest codiert habe). Wenn ich meinen Code ausführe, geht er auf die Seite und lädt die Karte, aber es werden keine Pins angezeigt. Außerdem wird die Karte überhaupt nicht gezoomt, obwohl ich die ZoomLevel Eigenschaft in der XAML gesetzt habe. Ich bin neu in diesem Codierungsparadigma, also muss es etwas geben, das mir fehlt. Hier ist, was ich in den xaml und C# Dateien habe:Einrichten von Pushpins unter Windows Phone 8 Bing Maps (XAML C#)

MainPage.xaml.cs (nur der Konstruktor wird angezeigt, aber ich habe keine anderen Methoden zur Vereinfachung) (Sie können auskommentierte Abschnitte sehen, wo ich mehrere ausprobiert habe Ansätze, von denen keines gearbeitet haben)

public MainPage() 
    { 
     InitializeComponent(); 
     Map myMap = new Map(); 
     MapLayer layer0 = new MapLayer(); 

     Pushpin pushpin0 = new Pushpin(); 
     //Pushpin pushpin0 = (Pushpin)this.FindName("pushpin0"); 
     //Pushpin pushpin0 = MapExtensions.GetChildren(myMap).OfType<Pushpin>().First(p => p.Name == "pushpin0"); 
     //if (pushpin0 == null) { pushpin0 = new Pushpin(); } 
     pushpin0.GeoCoordinate = new GeoCoordinate(37.228510, -80.422860); 
     MapOverlay overlay0 = new MapOverlay(); 
     overlay0.Content = pushpin0; 
     overlay0.GeoCoordinate = new GeoCoordinate(37.228510, -80.422860); 
     layer0.Add(overlay0); 

     Pushpin pushpin1 = new Pushpin(); 
     pushpin1.GeoCoordinate = new GeoCoordinate(37.226399, -80.425271); 
     MapOverlay overlay1 = new MapOverlay(); 
     overlay1.Content = pushpin1; 
     layer0.Add(overlay1); 
     Pushpin pushpin2 = new Pushpin(); 
     pushpin2.GeoCoordinate = new GeoCoordinate(37.228900, -80.427450); 
     MapOverlay overlay2 = new MapOverlay(); 
     overlay2.Content = pushpin2; 
     layer0.Add(overlay2); 

     ContentPanel.Children.Add(myMap); 
    } 

MainPage.xaml

<phone:PhoneApplicationPage 
x:Class="SimpleApp.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" 
FontFamily="{StaticResource PhoneFontFamilyNormal}" 
FontSize="{StaticResource PhoneFontSizeNormal}" 
Foreground="{StaticResource PhoneForegroundBrush}" 
SupportedOrientations="Portrait" Orientation="Portrait" 
shell:SystemTray.IsVisible="True" 
xmlns:Controls="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps" 
xmlns:toolkit="clr-namespace:Microsoft.Phone.Maps.Toolkit;assembly=Microsoft.Phone.Controls.Toolkit"> 

<!--LayoutRoot is the root grid where all page content is placed--> 
<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <!--TitlePanel contains the name of the application and page title--> 
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> 
     <TextBlock Text="Simple Map Application with Pushpins" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/> 
     <TextBlock Text="Pushpins" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
    </StackPanel> 

    <!--ContentPanel - place additional content here--> 
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <Controls:Map x:Name="myMap" ZoomLevel="17" Center="37.227700, -80.422037" CartographicMode="Road"> 
      <toolkit:MapExtensions.Children> 
       <toolkit:Pushpin x:Name="pushpin0" Content="My Position"/> 
       <toolkit:Pushpin x:Name="pushpin1" Content="My Position"/> 
       <toolkit:Pushpin x:Name="pushpin2" Content="My Position"/> 
      </toolkit:MapExtensions.Children> 
     </Controls:Map> 
    </Grid> 

</Grid> 

</phone:PhoneApplicationPage> 

Es gibt tatsächlich mehr Pins hinzugefügt werden, aber ich gehe davon aus, wenn ich nur ein paar zu arbeiten, mehr Hinzufügen ähnlich wird trivial sein.

Antwort

8

Das größte Problem, das Sie haben, ist, dass Sie ein zweites Map-Steuerelement erstellt und das über das erste angezeigt haben.

Der von Ihnen erstellte hat keinen ZoomLevel- und Center-Satz.

Sie haben auch nicht die Ebene mit den Pins in der Karte hinzugefügt.

Der schnellste Weg für Sie, um zu sehen, was los sein wird zu Ihrem Konstruktor wie folgt zu ändern:

public MainPage() 
{ 
    InitializeComponent(); 
    //Map myMap = new Map(); // You shouldn't do this as you already have a map on the page 
    MapLayer layer0 = new MapLayer(); 

    Pushpin pushpin0 = new Pushpin(); 
    //Pushpin pushpin0 = (Pushpin)this.FindName("pushpin0"); 
    //Pushpin pushpin0 = MapExtensions.GetChildren(myMap).OfType<Pushpin>().First(p => p.Name == "pushpin0"); 
    //if (pushpin0 == null) { pushpin0 = new Pushpin(); } 
    pushpin0.GeoCoordinate = new GeoCoordinate(37.228510, -80.422860); 
    MapOverlay overlay0 = new MapOverlay(); 
    overlay0.Content = pushpin0; 
    overlay0.GeoCoordinate = new GeoCoordinate(37.228510, -80.422860); 
    layer0.Add(overlay0); 

    Pushpin pushpin1 = new Pushpin(); 
    pushpin1.GeoCoordinate = new GeoCoordinate(37.226399, -80.425271); 
    MapOverlay overlay1 = new MapOverlay(); 
    overlay1.Content = pushpin1; 
    layer0.Add(overlay1); 
    Pushpin pushpin2 = new Pushpin(); 
    pushpin2.GeoCoordinate = new GeoCoordinate(37.228900, -80.427450); 
    MapOverlay overlay2 = new MapOverlay(); 
    overlay2.Content = pushpin2; 
    layer0.Add(overlay2); 

    // Add the layer with the pins in to the map 
    myMap.Layers.Add(layer0); 
    //ContentPanel.Children.Add(myMap); 
} 

Sie dann die Stifte Sie in XAML definiert haben entfernen können.

+0

Vielen Dank! Ich wusste, dass es etwas Triviales gab, das ich vermisste, und es wurde die Ebene hinzugefügt. Ich hatte das im vorherigen Code aber versehentlich gelöscht. Ich denke, das Konzept, das ich hier fehlt, ist, dass Sie nicht Dinge in XAML definieren und sie im Code definieren müssen. Definiere sie einfach an einer Stelle und ich kann sie bei Bedarf in der anderen referenzieren. Egal, vielen Dank. – eholder0