2017-04-06 5 views
1

Nach dem Windows 10 Creators Upgrade (Build 15063) sind die MapControl Kinder in meiner UWP App nicht mehr auf der Karte fixiert, wenn man die Karte bewegt oder zoomt. Ab einer bestimmten Zoomstufe bemerkte ich einen Unterschied im Verhalten beim Zoomen auf der Karte. Von diesem Punkt ist ein visueller "Globe" -Effekt erkennbar. Schwer zu beschreiben, aber die Karte ist meiner Meinung nach nicht ganz flach (2D).UWP MapControl Kinder nicht mehr fest positioniert nach W10 Creators Update

Sehen Sie hier die gewünschte Ausgabe auf Build 14393, wie Sie den Radar-Overlay bleibt an der gleichen Position sehen können beim Verschieben oder Zoomen der Karte: Image: https://www.regenthetin.nl/files/desired_behaviour_v14393.gif

Unerwünschte Ausgabe auf Build 15063, die Overlay bewegt sich langsam mit der Karte: Image: https://www.regenthetin.nl/files/undesired_behaviour_v15063.gif

Verantwortlich Codeblöcke:

Snippet 1

// Add children to MapControl at specified location 
var radarImgPosition = new Geopoint(new BasicGeoposition() 
{ 
    Latitude = 59.60, 
    Longitude = -12.00 
}); 

RadarMap.Children.Clear(); 
if (RadarMap.Children.Count == 0) 
{ 
    RadarMap.Children.Add(radarImg); 
    MapControl.SetLocation(radarImg, radarImgPosition); 
} 

Snippet 2

private void RadarMap_ZoomLevelChanged(MapControl sender, object args) 
{ 
    Windows.Foundation.Point southWestPoint; 
    RadarMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition() 
    { 
     Longitude = -11.9687, 
     Latitude = 46.9106 
    }), out southWestPoint); 

    Windows.Foundation.Point northEastPoint; 
    RadarMap.GetOffsetFromLocation(new Geopoint(new BasicGeoposition() 
    { 
     Longitude = 15.5080, 
     Latitude = 60.0247 
    }), out northEastPoint); 

    double radarImgWidth = northEastPoint.X - southWestPoint.X; 
    double radarImgHeight = Math.Abs(northEastPoint.Y - southWestPoint.Y); 

    DisplayInformation displayInformation = DisplayInformation.GetForCurrentView(); 
    double scaleValue = (displayInformation.RawPixelsPerViewPixel * 100.0); 

    radarImg.Height = (radarImgHeight)/(scaleValue/100); 
    radarImg.Width = (radarImgWidth)/(scaleValue/100); 
} 

ich es für mehrere Stunden untersucht habe, aber ich habe keine Lösung bisher finden. Ich hoffe, dass mir jemand helfen kann!

Dev-Konfiguration: Visual Studio 2017 i.c.m. Windows 10 Creators aktualisieren das SDK.

+0

Was ist das Ziel SDK in Ihrem Projekt? –

+0

Hallo Stefano, ich habe das Ziel auf den neuesten Build (15063) geändert. Das Verhalten von MapControl ist jedoch gleich, wenn Sie auf eine niedrigere Version abzielen. Es ist sehr ärgerlich, wenn keine Lösung verfügbar ist, werde ich zu Google Maps wechseln und es in ein Browser-Element einbetten. Enttäuschend, aber die einzige Möglichkeit, die gleiche Benutzererfahrung zu garantieren. Hast du andere Vorschläge? –

+0

Dies ist ein Fehler, denn wenn Sie das alte SDK als Ziel verwenden, sollte sich das Verhalten nicht ändern. Sie sollten diesen Fehler an Microsoft melden. –

Antwort

1

Ich habe die Lösung für mein Problem gefunden und ich habe das Gefühl, dass es verwandt ist. Hintergrund: Mein MapControl hat ein XAML-Element als untergeordnet und ich setze und ändere die Position, während das Element sichtbar ist. Dieses Kind zeigte den gleichen Effekt wie der bereits beschriebene Thread Opener.

Es stellte sich heraus, dass das neue MapControl (des Ersteller-Updates) auch die Höhe berücksichtigt, wenn das Kind positioniert wird. Mit anderen Worten, jetzt befindet sich ein XAML-Kind im Raum und nicht auf der Flap-Map. Meine Vermutung ist das Ergebnis des neuen Pseudo-3D-Effekts von MapControl.

Die Lösung ist das Kind auf die Oberfläche zu positionieren, indem das Gelände Referenzsystem specifing und Einstellen der Höhe auf 0:

 var location = new Geopoint(new BasicGeoposition 
      { 
       Latitude = currentLatitude, 
       Longitude = currentLongitude, 
       Altitude = 0 
      }, 
      AltitudeReferenceSystem.Terrain); 
     MapControl.SetLocation(myChild, location); 
Verwandte Themen