Я пытаюсь создать пользовательский Pushpin для Bing Maps в моем приложении WinRT. Моя проблема в том, что мне нужна ссылка на фактическую карту с моей страницы, чтобы правильно вставить значки в свой userControl. Так, например, это мой DataTemplate, который привязан к карте и отлично работает для обычных кнопок. Для правильной настройки пользовательского UserControl мне нужна ссылка на родительскую карту в userControl.Параметрированный конструктор для WinRT UserControl
Это моя XAML:
<m:MapItemsControl x:Name="Pushpinss" ItemsSource="{Binding InventoryItems}">
<m:MapItemsControl.ItemTemplate>
<DataTemplate>
<!-- NORMAL PUSHPIN WORKS -->
<m:Pushpin>
<m:MapLayer.Position>
<m:Location Latitude="{Binding WarehouseLatitude}"
Longitude="{Binding WarehouseLongitude}" />
</m:MapLayer.Position>
</m:Pushpin>
<!-- CUSTOM CONTROL DISPLAYS BUT DOES NOT POSITION CORRECTLY BECAUSE I NEED A REFERENCE TO THE MAP-->
<View:GPSIcon Latitude="{Binding WarehouseLatitude}"
Longitude="{Binding WarehouseLongitude}"
Radius="100000"/>
<x:Arguments>
</x:Arguments>
</DataTemplate>
</m:MapItemsControl.ItemTemplate>
</m:MapItemsControl>
Это мой пользовательский элемент управления:
public sealed partial class GPSIcon : UserControl
{
private Map _map;
private const double EARTH_RADIUS_METERS = 6378137;
public GPSIcon(Map map)
{
this.InitializeComponent();
_map = map;
_map.ViewChanged += (s, e) =>
{
UpdateAccuracyCircle();
};
}
public static readonly DependencyProperty LatitudeProperty =
DependencyProperty.Register("Latitude", typeof(double), typeof(GPSIcon), new PropertyMetadata(0));
public static readonly DependencyProperty LongitudeProperty =
DependencyProperty.Register("Longitude", typeof(double), typeof(GPSIcon), new PropertyMetadata(0));
public static readonly DependencyProperty RadiusProperty =
DependencyProperty.Register("Radius", typeof(double), typeof(GPSIcon), new PropertyMetadata(0));
public double Latitude
{
get { return (double)GetValue(LatitudeProperty); }
set { SetValue(LatitudeProperty, value); }
}
public double Longitude
{
get { return (double)GetValue(LongitudeProperty); }
set { SetValue(LongitudeProperty, value); }
}
/// <summary>
/// Radius in Metres
/// </summary>
public double Radius
{
get { return (double)GetValue(RadiusProperty); }
set
{
SetValue(RadiusProperty, value);
UpdateAccuracyCircle();
}
}
private void UpdateAccuracyCircle()
{
if (_map != null && Radius >= 0)
{
double groundResolution = Math.Cos(_map.Center.Latitude * Math.PI/180) * 2 * Math.PI * EARTH_RADIUS_METERS/(256 * Math.Pow(2, _map.ZoomLevel));
double pixelRadius = Radius/groundResolution;
AccuracyCircle.Width = pixelRadius;
AccuracyCircle.Height = pixelRadius;
AccuracyCircle.Margin = new Thickness(-pixelRadius/2, -pixelRadius/2, 0, 0);
}
}
}
Возможно ли это вообще? Я также попытался с помощью х: аргументы директивы, как описано здесь: http://msdn.microsoft.com/en-us/library/ee795382.aspx
Благодарности
Спасибо Я попытался это, но я не могу заставить его связать. Какой синтаксис привязки следует использовать для WinRT? Визуальное дерево
jqIndy
См. Обновление 1. – Xyroid
Большое спасибо. Я не могу дождаться выпуска Win8.1. Отладка - это кошмар. Мне пришлось снова создать это приложение, потому что ничего в моем настраиваемом элементе управления больше не работает и по-прежнему не по какой-то причине. Ваш образец имеет смысл. Я дам вам знать, если это сработает, когда я его построю :) – jqIndy