Hallo,
Ich nutze folgendes Control um Map-Tiles anzuzeigen:
greatmaps.codeplex.com. Meine Applikation folgt dem MVMV Pattern.
GMap.NET's GMapControl nutzt intern ein Canvas, um z.B. Map Marker darzustellen.
Mein Problem ist nun folgendes:
Schiebt man einen MapMarker (ist ein beliebiges UserControl) ausserhalb des sichtbaren Bereiches wird das wunderbar geclipt. Nun habe ich für die Marker einen Adorner definiert, um deren Selektionsstatus zu visualisieren - und diese Adorner werden nun quer über die gesammte Applikation gerendert. Sieht recht ulkig aus:
img812.imageshack.us...277/adornerissue.png
Ich hab mich zum Thema Adorner belesen, und die vermeintliche Lösung zum Problem ist einfach: Vom Marker wird der nächst höhere (Parent) AdornerLayer gesucht - und wenn ich meine Map mit einem <AdornerDecorator></AdornerDecorator> umschliesse sollte sich der Adorner nicht mehr auserhalb von diesem rendern lassen.
Das funktioniert nur leider nicht.
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| <Grid> <AdornerDecorator> <ContentControl ClipToBounds="True" Content="{Binding MapControl}"> <ContentControl.ContextMenu> <ContextMenu> <MenuItem Header="Add to Route" Command="{Binding AddSelectionToActiveRouteCommand}" /> <MenuItem Header="Remove from Route" Command="{Binding RemoveSelectionFromActiveRouteCommand}" /> </ContextMenu> </ContentControl.ContextMenu> </ContentControl> </AdornerDecorator> </Grid> |
Irgendjemand ne Idee was das sein könnte?
Abweichungen vom Standard:
Es gibt zwei Dinge, die von den 08/15 Beispielen abweichen:
Die Adorner definiere ich für gewöhnlich in xaml, mit diesen Klassen:
www.codeproject.com/.../adornedcontrol.aspx
Grundsätzlich wird so das Control von einem AdornedControl : ContentControl umschlossen, und im Code davon passiert das unspektakuläre:
this.adornerLayer = AdornerLayer.GetAdornerLayer(this);
GMap.Net ist leider nicht ganz MVVM freundlich, daher hat mein DeliveryMapViewModel ein Property MapControl was einer Instanz des GMap.NET GMapControls entspricht, und dieses binde ich dann wie oben zu sehen ist an den ContentControl.Content.
Grüsse