2013-03-27 17 views
5

Próbuję wykonać prostą przykładową aplikację, którą później opublikuję w systemie Windows Phone 8. Chcę utworzyć mapę Bing na stronie głównej MainPage.xaml, wyśrodkowanej na point (37.227700, -80422037) i mają już wypchane pinezki na mapie (nie te, które użytkownik dodaje, tylko znaczniki dla określonych lokalizacji, które wstępnie wypełniłem w oparciu o niektóre dynamiczne dane, które na stałe zapisałem). Kiedy uruchamiam mój kod, przechodzi on do strony i ładuje mapę, ale nie widać pinów. Co więcej, mapa nie jest powiększana, mimo że ustawiam właściwość ZoomLevel w xaml. Jestem nowy w tym paradygmacie kodowania, więc musi być coś, czego mi brakuje. Oto, co mam w plikach xaml i C#:Konfigurowanie pinezek w systemie Windows Phone 8 Mapy Bing (XAML C#)

MainPage.xaml.cs (pokazany jest tylko konstruktor, ale nie mam innych metod uproszczenia) (możesz zobaczyć skomentowane sekcje, w których próbowałem wielu podejścia, z których żaden nie pracował)

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> 

Istnieje rzeczywiście więcej szpilki do dodania, ale jestem przy założeniu, jeśli mam tylko kilka pracować, dodając więcej podobnie będzie banalnie.

Odpowiedz

8

Największym problemem jest to, że utworzyłeś drugą kontrolkę mapy i wyświetliłeś ją w ciągu pierwszego.

Ten, który utworzyłeś, nie ma zestawu ZoomLevel i Center.

Nie dodałeś również warstwy z pinezkami na mapie.

Najszybszym sposobem, aby zobaczyć, co się dzieje będzie zmienić konstruktora do następujących:

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); 
} 

Następnie można usunąć szpilki już zdefiniowane w XAML.

+0

Dziękuję bardzo! Wiedziałem, że musiało być coś trywialnego, czego mi brakowało i to było dodawanie warstwy. Miałem to w poprzednim kodzie, ale przypadkowo go skasowałem. Domyślam się, że koncepcja, której tu brakuje, polega na tym, że nie musisz definiować rzeczy w Xaml ORAZ definiować ich w kodzie. Po prostu zdefiniuj je w jednym miejscu i jeśli to konieczne, umiem je odnieść w drugim. Bez względu, dziękuję bardzo. – eholder0