2013-03-27 20 views
5

Tôi đang cố gắng làm một ứng dụng ví dụ đơn giản để xây dựng sau này cho Windows Phone 8. Tôi muốn tạo bản đồ Bing trên MainPage.xaml của mình, tập trung tại điểm (37.227700, -80422037), và có đinh ghim đã được điền trên bản đồ (không phải những cái mà người dùng thêm vào, chỉ đánh dấu cho các vị trí cụ thể mà tôi có sẵn trên cơ sở dữ liệu động mà tôi đã mã hóa trong thời điểm này). Khi tôi chạy mã của tôi, nó đi đến trang và tải bản đồ lên, nhưng không có chân được hiển thị. Hơn nữa, bản đồ không được phóng to ở tất cả mặc dù thực tế là tôi đặt thuộc tính ZoomLevel trong xaml. Tôi mới vào mô hình mã hóa này vì vậy phải có một cái gì đó tôi đang mất tích. Dưới đây là những gì tôi có trong các tệp xaml và C#:Thiết lập Pushpins trên Windows Phone 8 Bản đồ Bing (XAML C#)

MainPage.xaml.cs (chỉ hàm tạo được hiển thị, nhưng tôi không có phương pháp khác để đơn giản) (bạn có thể xem các phần đã nhận xét ở nơi tôi đã thử nhiều phương pháp tiếp cận, không ai trong số đó đã làm việc)

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> 

thực tế, có nhiều chân để được thêm vào, nhưng tôi giả định nếu tôi nhận được chỉ là một vài để làm việc, bổ sung thêm tương tự sẽ là tầm thường.

Trả lời

8

Vấn đề lớn nhất mà bạn có là bạn đã tạo một điều khiển Bản đồ thứ hai và hiển thị trên điều khiển đầu tiên.

Loại bạn đã tạo không có ZoomLevel và Trung tâm được đặt.

Bạn cũng chưa thêm lớp có ghim vào bản đồ.

Cách nhanh nhất để bạn có thể xem những gì đang xảy ra sẽ thay đổi constructor của bạn như sau:

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

Sau đó bạn có thể loại bỏ các chân bạn đã xác định trong XAML.

+0

Cảm ơn bạn rất nhiều! Tôi biết chắc phải có thứ gì đó tầm thường tôi đã bỏ lỡ và nó đã thêm lớp. Tôi đã có trong mã trước đó nhưng vô tình xóa nó. Tôi đoán khái niệm tôi thiếu ở đây là bạn không phải định nghĩa mọi thứ trong xaml VÀ định nghĩa chúng trong mã. Chỉ cần xác định chúng ở một nơi và tôi có thể tham khảo chúng nếu cần. Bất kể, cảm ơn bạn rất nhiều. – eholder0