Есть много решений для этого, все в зависимости от вашего дизайна (и вкусов).
Во всех случаях следует помнить, что расположение элементов на карте всегда будет соответствовать размеру карты, и его необходимо будет пересчитывать всякий раз, когда изменяется размер фоновой карты. Это вычисление будет зависеть от самой карты (то есть является ли она прямоугольником или круглой, является ли широта / долгота фиксированной и равной сеткой, расположение карты и т. Д.).
Один из возможных способов настройки главного окна - что-то вроде этого:
Предполагается, что существует папка «Ресурсы», которая содержит изображение с именем «world-map.jpg», в котором для параметра «Действие сборки» установлено значение «Ресурс».
Тогда в вашем коде позади вас должно быть что-то, что фактически добавляет новое изображение на карту в соответствующем месте.
Лично я, вероятно, создал бы класс (возможно, пользовательский или пользовательский элемент управления) для хранения информации об изображении, включая широту / долготу, объект Image и т. Д. Главное окно (или ViewModel) будет иметь коллекцию этих объекты, которые облегчили бы их размещение в нужных местах при изменении размера. Например:
public partial class Window1 : Window
{
ObservableCollection<MyMapImageClass> mapImages = new ObservableCollection<MyMapImageClass>();
public Window1()
{
InitializeComponent();
layout.SizeChanged += new SizeChangedEventHandler(layout_SizeChanged);
}
void layout_SizeChanged(object sender, SizeChangedEventArgs e)
{
foreach (MyMapImageClass mapImage in mapImages)
{
Point point = CalculateImagePosition(mapImage.latitude, mapImage.longitude);
mapImage.Image.SetValue(Canvas.LeftProperty, point.X);
mapImage.Image.SetValue(Canvas.TopProperty, point.Y);
}
}
Point CalculateImagePlacement(double latitude, double longitude)
{
Point point = new Point();
// Do the calculations appropriate to your map
point.X = LongCalculation(longitude);
point.Y = LatCalculation(latitude);
}
void PlaceImage(double latitude, double longitude)
{
Image img = new Image();
ImageSourceConverter converter = new ImageSourceConverter();
string path = "pack://application:,,,/Resources/SomeImage.png";
ImageSource source = (ImageSource)converter.ConvertFromString(path);
img.Source = source;
img.Width = 10d;
Point point = CalculateImagePlacement(latitude, longitude);
img.SetValue(Canvas.LeftProperty, point.X);
img.SetValue(Canvas.TopProperty, point.Y);
layout.Children.Add(img);
MyMapImageClass mapImage = new MyMapImageClass();
mapImage.Latitude = latitude;
mapImage.Longitude = longitude;
mapImage.Image = img;
mapImages.Add(mapImage);
}
}