2013-03-27 7 views
5

मैं बाद में विंडोज फोन 8 के लिए निर्माण करने के लिए एक साधारण उदाहरण एप्लिकेशन करने की कोशिश कर रहा हूं। मैं अपने मेनपेज.एक्सएमएल पर एक बिंग मैप बनाना चाहता हूं, पर केंद्रित बिंदु (37.227700, -80422037), और पुशपिन पहले से ही मानचित्र पर आबादी वाले हैं (उपयोगकर्ता जो नहीं जोड़ते हैं, केवल विशिष्ट स्थानों के लिए मार्कर जो मैं कुछ गतिशील डेटा के आधार पर पूर्ववत करता हूं जिसे मैंने इस पल के लिए हार्डकोड किया है)। जब मैं अपना कोड चलाता हूं, तो यह पृष्ठ पर जाता है और मानचित्र को लोड करता है, लेकिन कोई पिन दिखाई नहीं देता है। इसके अलावा, इस तथ्य के बावजूद नक्शा ज़ूम नहीं किया गया है कि मैंने ज़ूमलेवल संपत्ति को xaml में सेट किया है। मैं इस कोडिंग प्रतिमान के लिए नया हूं इसलिए मुझे कुछ याद आना चाहिए। मेरे पास xaml और C# फ़ाइलों में है:विंडोज फोन पर पुशपिन सेट करना 8 बिंग मैप्स (एक्सएएमएल सी #)

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

आपके पास सबसे बड़ा मुद्दा यह है कि आपने दूसरा नक्शा नियंत्रण बनाया है और पहले इसे प्रदर्शित किया है।

आपके द्वारा बनाए गए एक में ज़ूमलेवल और सेंटर सेट नहीं है।

आपने मानचित्र में पिन के साथ परत भी नहीं जोड़ा है।

आप को देखने के लिए क्या निम्नलिखित करने के लिए अपने निर्माता को बदलने के लिए किया जाएगा हो रहा है के लिए तेज तरीका:

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

संबंधित मुद्दे