2015-06-26 2 views
1

У меня есть требование, когда мне нужно показать кнопку для конкретного местоположения. Я могу добавить пользовательскую кнопку, поскольку класс PushPin теперь устарел. Код, который выглядит следующим образом:Pushpin для Windows Phone App 8.1 похож на Windows Map App

var location= new Geopoint(new BasicGeoposition() { Latitude = 19.4034, Longitude = 73.8312 }); 
     var pin= CreatePin(); 
     mapper.Children.Add(pin); 
     MapControl.SetLocation(pin, location); 
     MapControl.SetNormalizedAnchorPoint(pin, new Point(0.0, 1.0)); 
     mapper.TrySetViewAsync(location, 16, 0, 0, MapAnimationKind.Bow); 

код для пользовательского CreatePin является:

private DependencyObject CreatePin() 
    { 
     //Creating a Grid element. 
     var myGrid = new Grid(); 
     myGrid.RowDefinitions.Add(new RowDefinition()); 
     myGrid.RowDefinitions.Add(new RowDefinition()); 
     myGrid.Background = new SolidColorBrush(Colors.Transparent); 

     //Creating a Rectangle 
     var myRectangle = new Rectangle {Fill = new SolidColorBrush(Colors.Black), Height = 20, Width = 20}; 
     myRectangle.SetValue(Grid.RowProperty, 0); 
     myRectangle.SetValue(Grid.ColumnProperty, 0); 

     //Adding the Rectangle to the Grid 
     myGrid.Children.Add(myRectangle); 

     //Creating a Polygon 
     var myPolygon = new Polygon() 
     { 
      Points = new PointCollection() {new Point(2, 0), new Point(22, 0), new Point(2, 40)}, 
      Stroke = new SolidColorBrush(Colors.Black), 
      Fill = new SolidColorBrush(Colors.Black) 
     }; 
     myPolygon.SetValue(Grid.RowProperty, 1); 
     myPolygon.SetValue(Grid.ColumnProperty, 0); 

     //Adding the Polygon to the Grid 
     myGrid.Children.Add(myPolygon); 
     return myGrid; 
    } 

Я могу показать пользовательский булавку Теперь, однако, не может показать title.Is там путь я могу достичь булавки, как использовать в окне карты приложении

Что я получаю сейчас:

enter image description here

Что я хочу:

enter image description here

Что-то вроде this.Or, если это не представляется возможным способом, чтобы добавить заголовок к контакту. Пожалуйста, не предлагают MapIcon, как я попробовал его, и он не показывает вверх mapicon, если не увеличено, также я нашел его не вполне надежен

MapIcon не гарантированно будет показано. Он может быть скрыт, когда он скрывает другие элементы или метки на карте.

Не обязательно указывать необязательное название MapIcon. Если вы не видите текст, уменьшите его, уменьшив значение свойства ZoomLevel для MapControl.

При отображении изображения MapIcon, указывающего на конкретное местоположение на карте - например, нажатие или стрелка - рассмотрите возможность установки значения свойства NormalizedAnchorPoint в приблизительном местоположении указателя на изображении. Если вы оставите значение NormalizedAnchorPoint со значением по умолчанию (0, 0), которое представляет верхний левый угол изображения, изменения в ZoomLevel карты могут оставить изображение, указывающее на другое место.

ответ

0

Я могу показать текст вдоль строки вместе с многоугольником и прямоугольником. Это как можно ближе.

private DependencyObject CreatePin() 
    { 
     //Creating a Grid element. 
     var myGrid = new Grid(); 
     myGrid.RowDefinitions.Add(new RowDefinition()); 
     myGrid.RowDefinitions.Add(new RowDefinition()); 
     myGrid.ColumnDefinitions.Add(new ColumnDefinition()); 
     myGrid.ColumnDefinitions.Add(new ColumnDefinition()); 
     myGrid.Background = new SolidColorBrush(Colors.Transparent); 

     //Creating a Rectangle 
     var myRectangle = new Rectangle {Fill = new SolidColorBrush(Colors.Blue), Height = 20, Width = 20}; 
     myRectangle.SetValue(Grid.RowProperty, 0); 
     myRectangle.SetValue(Grid.ColumnProperty, 0); 

     //Adding the Rectangle to the Grid 
     myGrid.Children.Add(myRectangle); 

     //Creating a Polygon 
     var myPolygon = new Polygon() 
     { 
      Points = new PointCollection() {new Point(2, 0), new Point(22, 0), new Point(2, 40)}, 
      Stroke = new SolidColorBrush(Colors.Blue), 
      Fill = new SolidColorBrush(Colors.Blue), 
     }; 
     myPolygon.SetValue(Grid.RowProperty, 1); 
     myPolygon.SetValue(Grid.ColumnProperty, 0); 
     TextBlock newtextblock = new TextBlock(); 
     newtextblock.Text = "hello"; 
     newtextblock.FontSize = 15; 
     newtextblock.Foreground = new SolidColorBrush(Colors.Blue); 
     newtextblock.SetValue(Grid.RowProperty, 0); 
     newtextblock.SetValue(Grid.ColumnProperty, 1); 
     myGrid.Children.Add(newtextblock); 
     //Adding the Polygon to the Grid 
     myGrid.Children.Add(myPolygon); 
     return myGrid; 
    } 

enter image description here

Это выглядит очень некрасиво. Но это все, о чем я мог подумать. Если есть лучший способ достичь этого, отправьте ответ. Все еще ждут больше ответов.

+0

Это нормально, если вы пытаетесь подражать старая форма push-контактов, но новый API с [MapIcons] (https://msdn.microsoft.com/en-us/library/windows/apps/xaml/dn792121.aspx) представляется лучшим вариантом – Petesh

+0

Я пробовал MapIcons, используя этот код MapIcon MapIcon1 = new MapIcon(); MapIcon1.Location = new Geopoint (startLocation); MapIcon1.NormalizedAnchorPoint = новая точка (0,5, 0,5); MapIcon1.Title = "Space Needle"; mapper.MapElements.Add (MapIcon1); Однако значок не работает, пока он не будет увеличен – Pranjal

0

вы можете создать стиль, и вы можете дать его как стиль, как это:

<Style x:Key="PushPinFirmaStyle" TargetType="bm:Pushpin"> 
     <Setter Property="Width" Value="51"/> 
     <Setter Property="Height" Value="54"/> 
     <Setter Property="FontSize" Value="20"/> 
     <Setter Property="Foreground" Value="White"/> 
     <Setter Property="DataContext" Value="{Binding }"/> 
     <Setter Property="Margin" Value="-26,-54,26,54"/> 

     <Setter Property="Template" > 
      <Setter.Value> 
       <ControlTemplate> 
        <Grid x:Name="grdItem" DataContext="{Binding}" > 
         <Grid.Background> 
          <ImageBrush ImageSource="ms-appx:///Assets/icon/tesis.png" Stretch="Uniform"/> 
         </Grid.Background> 
         <TextBlock Text="{Binding NAME}" Margin="20,12,22,20 " Foreground="#003260"></TextBlock> 
        </Grid> 


       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

и вы можете установить его так:

Bing.Maps.Pushpin p=new Bing.Maps.Pushpin(); 
p.Style = (Style)Application.Current.Resources["PushPinFirmaStyle"]; 
0

друг взгляд, есть уже готовый класс канцелярской кнопки в пространстве имен под названием «Microsoft.Phone.Maps.Toolkit ", если вы не можете импортировать это пространство имен в свой проект, тогда вам нужно добавить его, вы можете сделать это, перейдя в ИНСТРУМЕНТ> Диспетчер пакетов библиотек> Консоль диспетчера пакетов, а затем напишите эту команду« Install-Package WPtoolkit »

enter image description here

после того, как вы сделали это, вы должны ссылаться на него в коде XAML:

xmlns:toolkit="clr-namespace:Microsoft.Phone.Maps.Toolkit;assembly=Microsoft.Phone.Controls.Toolkit" 

, то вы можете легко добавить булавку в C#:

using Microsoft.Phone.Controls; 
using System.Device.Location; 
using Windows.Devices.Geolocation; 
using Microsoft.Phone.Maps.Controls; 
using Microsoft.Phone.Maps.Toolkit; 
Pushpin pin = new Pushpin() 
     { 
      Content = "MyPushpin", 
      Background = new SolidColorBrush(Colors.Blue), 
      BorderBrush = new SolidColorBrush(Colors.White) 
     }; 
MapOverlay relay = new MapOverlay() 
     { 
      Content = pin, 
      PositionOrigin = new Point(0.5, 0.5), 
      GeoCoordinate = myGeoCoordinates // myGeoCoordinates is an object of the class GeoCoordinate 
     }; 
MapLayer layer = new MapLayer(); 
layer.Add(relay); 
myMap.Layers.Add(layer); // myMap is the name of your map control 

это должно быть результатом:

enter image description here .

надеюсь, что это помогает :)

PeaceBeUponYou (Y)

Ссылки:

http://www.codeproject.com/Tips/806054/Windows-Phone-Location-Map-Pushpin http://phone.codeplex.com/