我正嘗試在WinRT應用程序中爲Bing地圖創建自定義圖釘。我的問題是,我需要從我的頁面上的實際地圖的引用,以便在我的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);
}
}
}
這是可能的呢?我已經使用x也嘗試:參數指令如下所述: http://msdn.microsoft.com/en-us/library/ee795382.aspx
感謝
謝謝,我已經試過了,但我不能讓它綁定。我應該爲WinRT使用什麼綁定語法?可視化樹是
jqIndy
請參閱更新1. – Xyroid
非常感謝。我不能等待Win8.1發佈。調試是一場噩夢。我不得不重新創建這個應用程序,因爲我的自定義控件中沒有任何工作了,仍然沒有出於某種原因。你的例子很有意義。我會讓你知道,如果它的工作,當我得到它建立:) – jqIndy