私自身の解決策を取りながらこのことが出てきました。注意するために、私は2Way MVVMバインディングパターンも使用していますが、完璧に動作します。
1)親が、実行時にピンにあるにMapLayer見つけるのを助けるために、この拡張メソッド:
public static T FindVisualParent<T>(this DependencyObject obj)
where T : DependencyObject
{
DependencyObject parent = VisualTreeHelper.GetParent(obj);
while (parent != null)
{
T typed = parent as T;
if (typed != null)
{
return typed;
}
parent = VisualTreeHelper.GetParent(parent);
}
return null;
}
2)画鋲のドラッグイベントハンドラでは、その拡張メソッドを呼び出すあなたは、2つのことを必要とします非同期的に視覚的な更新を実行し、あなたにピンをドラッグで素敵なスライドの周りの挙動を与える必要があります
void ParentMap_MouseMove(object sender, MouseEventArgs e)
{
var map = sender as Microsoft.Maps.MapControl.Map;
var parentLayer = this.FindVisualParent<MapLayer>();
if (this.isDragging)
{
var mouseMapPosition = e.GetPosition(map);
var mouseGeocode = map.ViewportPointToLocation(mouseMapPosition);
this.Location = mouseGeocode;
parentLayer.InvalidateArrange();
}
}
を次のようにMapLayerをホスティングしている参照して、(UIElementから)最も麗しいInvalidateArrange方法をオフに発射します。 HTH
私がプッシュピンで同じ動作を使用するとXAMLの中にハードコーディングされたアプローチは期待と同じように動作します - 100%。だからおそらくバインドされたプッシュピン(MapItemsControl-ItemTemplate-DataTemplateを介して)の使用は責任を負うことです... –
私は、犯人を見つけたと思います - それはContentPresenterです。プッシュピンが子供である瞬間、もはやアニメートされません。 –