我尝试在地图上添加多个图钉,但它们不会出现在地图上! 正如我在删除DataTemplate标签时发现的那样,我看到Pin没有任何东西!
我的XAML代码:
<Window x:Class="Maps_test.AddPushpinToMap"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Maps_test"
mc:Ignorable="d"
Title="MainWindow"
xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF"
Width="1024" Height="768">
<Grid Name="Main">
<m:Map x:Name="myMap"
CredentialsProvider=" -"
Mode="AerialWithLabels"
Center="54.13,12.1004289"
ZoomLevel="12"
MouseDoubleClick="MapWithPushpins_MouseDoubleClick">
<m:MapItemsControl x:Name="PushpinCollection" ItemsSource="{Binding PushpinList}">
<m:MapItemsControl.ItemTemplate>
<DataTemplate>
<m:Pushpin Background="#FFB6DE2E" Tag="{Binding Tag}" Visibility="{Binding Show}">
<m:Location Latitude="{Binding Latitude}" Longitude="{Binding Longitude}" />
</m:Pushpin>
</DataTemplate>
</m:MapItemsControl.ItemTemplate>
</m:MapItemsControl>
<Button x:Name="button" Click="addImageToMap" Opacity="0.8" Grid.Row="1" HorizontalAlignment="Left" Height="24" Margin="10,52,0,0" VerticalAlignment="Top" Width="78">
<TextBlock><Run Text="Show Image"/></TextBlock>
</Button>
</m:Map>
<Grid x:Name="menugrid" HorizontalAlignment="Left" Height="45" Width="{Binding ElementName=Main,Path=ActualWidth}" Margin="0,-1,0,0" VerticalAlignment="Top" >
<Menu x:Name="menu" Margin="0,2,-4,0">
<Menu.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="#FF0C0909" Offset="1"/>
</LinearGradientBrush>
</Menu.Background>
<Label x:Name="label" Content="Rostocker Stadteil : " Height="23" Width="118" Foreground="#FFF9F4F4" FontFamily="Arial" Margin="0,10,0,0" />
<ComboBox x:Name="comboBox" SelectionChanged="ChangeMapView_SelectionChanged" Height="23" Width="160" Margin="0,8,0,0">
<ComboBoxItem Content="Seebad Warnemünde" Tag="54.1725,12.0828,0 15"/>
<ComboBoxItem Content="Diedrichshagen" Tag="54.171836,12.033028,0 15"/>
<ComboBoxItem Content="Markgrafenheide" Tag="54.190279,12.157802,0 15"/>
<ComboBoxItem Content="Hohe Düne" Tag="54.177790,12.116995,0 15"/>
<ComboBoxItem Content="Hinrichshagen" Tag="54.207616,12.196298,0 15"/>
<ComboBoxItem Content="Wiethagen" Tag="54.202428,12.252413,0 15"/>
<ComboBoxItem Content="Torfbrügge" Tag="54.233147,12.224683,0 15"/>
<ComboBoxItem Content="Lichtenhagen" Tag="54.155347,12.047310,0 15"/>
<ComboBoxItem Content="Groß Klein" Tag="54.149608,12.080472,0 15"/>
<ComboBoxItem Content="Lütten Klein" Tag="54.138211,12.052280,0 15"/>
<ComboBoxItem Content="Evershagen" Tag="54.118766,12.053579,0 15"/>
<ComboBoxItem Content="Schmarl" Tag="54.127447,12.080520,0 15"/>
<ComboBoxItem Content="Reutershagen" Tag="54.098111,12.072783,0 15"/>
<ComboBoxItem Content="Hansavirtel" Tag="54.084673,12.097592,0 15"/>
<ComboBoxItem Content="Gartenstadt/Stadtweide" Tag="54.076974,12.078598,0 15"/>
<ComboBoxItem Content="Kröpeliner-Tor-Vorstadt" Tag="54.095194,12.106574,0 15"/>
<ComboBoxItem Content="Südstadt" Tag="54.070748,12.121374,0 15"/>
<ComboBoxItem Content="Biestow" Tag="54.060217,12.098262,0 15"/>
<ComboBoxItem Content="Stadtmitte" Tag="54.085435,12.141921,0 15"/>
<ComboBoxItem Content="Brinkmansdorf" Tag="54.087047,12.175463,0 15"/>
<ComboBoxItem Content="Dierkow" Tag="54.100835,12.162007,0 15"/>
<ComboBoxItem Content="Toitenwinkel" Tag="54.116951,12.141470,0 15"/>
<ComboBoxItem Content="Gehldorf" Tag="54.104504,12.120084,0 15"/>
<ComboBoxItem Content="Hinrichsdorf" Tag="54.132611,12.158463,0 15"/>
<ComboBoxItem Content="Krummendorf" Tag="54.128727,12.121321,0 15"/>
<ComboBoxItem Content="Nienhagen" Tag="54.147796,12.173734,0 15"/>
<ComboBoxItem Content="Peez" Tag="54.148566,12.125750,0 15"/>
<ComboBoxItem Content="Stuthof" Tag="54.166652,12.173001,0 15"/>
<ComboBoxItem Content="Jürgeshof" Tag="54.177121,12.189099,0 15"/>
</ComboBox>
<Label x:Name="label1" Content="Umkreis :" Height="23" Width="64" Foreground="#FFF9F4F4" Margin="0,10,0,0"/>
<Slider x:Name="Distance" Width="100" BorderThickness="0,10,0,0" Value="1"/>
<Canvas Height="33" Width="265" Margin="0,5,0,0">
<ComboBox x:Name="EntityType" SelectionChanged="ShowPins_SelectionChanged" Height="23" Canvas.Left="98" Canvas.Top="10" Width="129">
<ComboBoxItem Tag="7011" IsSelected="True" >Hotels</ComboBoxItem>
<ComboBoxItem Tag="5800" >Tourist Attractions</ComboBoxItem>
<ComboBoxItem Tag="7999" >Restaurants</ComboBoxItem>
</ComboBox>
<Label x:Name="label2" Content="POIS:" Height="23" Canvas.Left="11" Canvas.Top="10" Width="71" Foreground="Gray"/>
</Canvas>
</Menu>
</Grid>
</Grid>
PushpinViewModel代码
public sealed partial class MainPage : Window
{
public MainPage()
{
PushpinViewModel pvm = new PushpinViewModel();
pvm.PushpinList = new ObservableCollection<PushpinClass>();
pvm.PushpinList.Add(new PushpinClass() { Latitude = 54.090604, Longitude = 12.147961, Tag = "5800", Show = Visibility.Visible });
pvm.PushpinList.Add(new PushpinClass() { Latitude = 54.1581419, Longitude = 12.0763132, Tag = "7999", Show = Visibility.Visible });
pvm.PushpinList.Add(new PushpinClass() { Latitude = 14f, Longitude = 12.0763132, Tag = "7011", Show = Visibility.Visible });
DataContext = pvm;
}
}
class PushpinViewModel
{
public ObservableCollection<PushpinClass> PushpinList { get; set; }
}
class PushpinClass
{
public double Longitude { get; set; }
public double Latitude { get; set; }
public string Tag { get; set; }
public Visibility Show { get; set; }
public ToolTip Tip { get; set; }
}
我的MAINWINDOW.XAML.CS代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using Microsoft.Maps.MapControl.WPF;
using Microsoft.Maps.MapControl.WPF.Design;
using System.Globalization;
using System.Xml;
using System.Net;
namespace Maps_test
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
}
}
public enum TagInfo { Hotels = 7011, Restaurants = 7999, TouristAttractions = 5800 }
public partial class AddPushpinToMap : Window
{
LocationConverter locConverter = new LocationConverter();
string BingMapsKey = "_";
public AddPushpinToMap()
{
InitializeComponent();
//Set focus on mapl
myMap.Focus();
}
private void MapWithPushpins_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// Disables the default mouse double-click action.
e.Handled = true;
// Determin the location to place the pushpin at on the map.
//Get the mouse click coordinates
Point mousePosition = e.GetPosition(this);
//Convert the mouse coordinates to a locatoin on the map
Location pinLocation = myMap.ViewportPointToLocation(mousePosition);
// The pushpin to add to the map.
Pushpin pin = new Pushpin();
pin.Location = pinLocation;
// Adds the pushpin to the map.
myMap.Children.Add(pin);
}
private void addImageToMap(object sender, RoutedEventArgs e)
{
MapLayer imageLayer = new MapLayer();
Image image = new Image();
image.Height = 150;
//Define the URI location of the image
BitmapImage myBitmapImage = new BitmapImage();
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri("https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Dortmund_Petrikirche.jpg/220px-Dortmund_Petrikirche.jpg");
// To save significant application memory, set the DecodePixelWidth or
// DecodePixelHeight of the BitmapImage value of the image source to the desired
// height or width of the rendered image. If you don't do this, the application will
// cache the image as though it were rendered as its normal size rather then just
// the size that is displayed.
// Note: In order to preserve aspect ratio, set DecodePixelWidth
// or DecodePixelHeight but not both.
//Define the image display properties
myBitmapImage.DecodePixelHeight = 150;
myBitmapImage.EndInit();
image.Source = myBitmapImage;
image.Opacity = 0.6;
image.Stretch = System.Windows.Media.Stretch.None;
//The map location to place the image at
Location location = new Location() { Latitude = 54.090604, Longitude = 12.147961 };
//Center the image around the location specified
PositionOrigin position = PositionOrigin.Center;
//Add the image to the defined map layer
imageLayer.AddChild(image, location, position);
//Add the image layer to the map
myMap.Children.Add(imageLayer);
}
private void viewMap_ViewChangeOnFrame(object sender, MapEventArgs e)
{
// Gets the map object that raised this event.
Map map = sender as Map;
// Determine if we have a valid map object.
if (map != null)
{
// Gets the center of the current map view for this particular frame.
Location mapCenter = map.Center;
/* // Updates the latitude and longitude values, in real time,
// as the map animates to the new location.
txtLatitude.Text = string.Format(CultureInfo.InvariantCulture,
"{0:F5}", mapCenter.Latitude);
txtLongitude.Text = string.Format(CultureInfo.InvariantCulture,
"{0:F5}", mapCenter.Longitude);*/
}
}
private void ChangeMapView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBoxItem cbi = (ComboBoxItem)(((ComboBox)sender).SelectedItem);
// Parse the information of the Combobox Tag property
string[] tagInfo = cbi.Tag.ToString().Split(' ');
Location center = (Location)locConverter.ConvertFrom(tagInfo[0]);
double zoom = System.Convert.ToDouble(tagInfo[1]);
// Set the map view
myMap.SetView(center, zoom);
}
// Geocode an address and return a latitude and longitude
public XmlDocument Geocode(string addressQuery)
{
//Create REST Services geocode request using Locations API
string geocodeRequest = "http://dev.virtualearth.net/REST/v1/Locations/" + addressQuery + "?o=xml&key=" + BingMapsKey;
//Make the request and get the response
XmlDocument geocodeResponse = GetXmlResponse(geocodeRequest);
return (geocodeResponse);
}
// Submit a REST Services or Spatial Data Services request and return the response
private XmlDocument GetXmlResponse(string requestUrl)
{
System.Diagnostics.Trace.WriteLine("Request URL (XML): " + requestUrl);
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception(String.Format("Server error (HTTP {0}: {1}).",
response.StatusCode,
response.StatusDescription));
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(response.GetResponseStream());
return xmlDoc;
}
}
public void ShowPins_SelectionChanged(object sender, SelectionChangedEventArgs e)
// Is part is not ready
{
ComboBoxItem pin = (ComboBoxItem)(((ComboBox)sender).SelectedItem);
string tagInfo = pin.Tag.ToString();
switch(tagInfo)
{
case "7011":
break;
}
}
}
我已经找到了解决方案,但我找到的并不起作用。 请帮助!!
答案 0 :(得分:0)
MapItemsControl继承自ItemsControl类,因此您必须绑定ItemsSource属性:
<m:MapItemsControl ItemsSource="{Binding PushpinList}"/>
编辑: 除此之外,你必须公开你的课程:
public class PushpinViewModel{...}
public class PushpinClass{...}