2013-03-27 12 views
5

後でWindows Phone 8をビルドするための簡単なサンプルアプリケーションを作成しようとしています。私のMainPage.xamlにBingマップを作成したい(37.227700、-80422037)、既にマップ上にプッシュピンが設定されています(ユーザーが追加するものではなく、あらかじめハードコードされた動的データに基づいて特定の場所にマーカを挿入します)。コードを実行すると、ページに移動してマップをロードしますが、ピンは表示されません。さらに、xamlにZoomLevelプロパティを設定したにもかかわらず、マップは全くズームインされません。私はこのコーディングのパラダイムが新しく、欠けているものがなければなりません。ここにxamlとc#ファイルの内容があります: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

最も大きな問題は、2番目のマップコントロールを作成し、それを最初に表示したことです。

あなたが作成したものには、ズームレベルとセンターが設定されていません。

また、ピンを含むレイヤーをマップに追加していません。

あなたが起こっているのかを確認するための最も簡単な方法は、次のようにあなたのコンストラクタを変更するには次のようになります。

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で定義してコードで定義する必要がないということです。 1つの場所でそれらを定義するだけで、必要に応じて他の場所でそれらを参照することができます。 に関係なく、ありがとうございます。 – eholder0

関連する問題