2013-03-27 4 views
5

Я пытаюсь сделать простое примерное приложение для последующего создания для Windows Phone 8. Я хочу создать карту Bing на моем MainPage.xaml, в центре (37.227700, -80422037), и на карте уже записаны кнопки (не те, которые пользователь добавляет, просто маркеры для определенных местоположений, которые я предварительно заполняю на основе некоторых динамических данных, которые я на данный момент жестко закодировал). Когда я запускаю свой код, он переходит на страницу и загружает карту вверх, но не отображаются контакты. Кроме того, карта не масштабируется вообще, несмотря на то, что я установил свойство ZoomLevel в xaml. Я новичок в этой парадигме кодирования, поэтому должно быть что-то, что мне не хватает. Вот что я имею в файлах xaml и C#:Настройка Pushpins на Windows Phone 8 Bing Maps (XAML C#)

MainPage.xaml.cs (показан только конструктор, но у меня нет других методов для простоты) (вы можете увидеть разделы с комментариями, в которых я попытался несколько подходы, ни один из которых не работал)

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> 

есть на самом деле больше булавки быть добавлены, но я предполагаю, что, если я получаю лишь немногие работы, добавляя больше аналогично будет тривиальным.

ответ

8

Самая большая проблема, с которой вы сталкиваетесь, заключается в том, что вы создали второй элемент управления Map и отобразили его над первым.

Тот, который вы создали, не имеет набора ZoomLevel и Center.

Вы также не добавили слой с контактами на карту.

Самый быстрый способ для вас, чтобы увидеть, что происходит будет изменить конструктор следующее:

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

Вы можете удалить контакты определенные вами в XAML.

+0

Большое вам спасибо! Я знал, что, должно быть, было что-то тривиальное, которого я отсутствовал, и он добавлял слой. Я имел это в предыдущем коде, но случайно удалил его. Я предполагаю, что концепция, которую я здесь отсутствует, заключается в том, что вам не нужно определять вещи в xaml и определять их в коде. Просто определите их в одном месте, и я могу ссылаться на них в другом, если это необходимо. Независимо от этого, большое спасибо. – eholder0

Смежные вопросы