ThinkGeo.com    |     Documentation    |     Premium Support

Marker context menu

 I'm trying to add a context menu to markers however, on right click nothing appears... I've tried multiple ways, could anyone suggest the problem?


Here are the different ways I've tried:


1: 



Marker marker =  new Marker(location.X, location.Y);
            
ContextMenu markerContextMenu = new ContextMenu();
MenuItem removeMenuItem = new MenuItem();
removeMenuItem.Header = "Remove Placemark";
removeMenuItem.Click += OnRemove_Click;
markerContextMenu.Items.Add(removeMenuItem);

marker.ContextMenu = markerContextMenu;

 


 2: 



Marker marker =  new Marker(location.X, location.Y);
            
ContextMenu markerContextMenu = new ContextMenu();
MenuItem removeMenuItem = new MenuItem();
removeMenuItem.Header = "Remove Placemark";
removeMenuItem.Click += OnRemove_Click;
markerContextMenu.Items.Add(removeMenuItem);

marker.SetResourceReference(Marker.ContextMenuProperty, markerContextMenu);

 


 3: 



DataTemplate markerTemplate = (DataTemplate) FindResource("MarkerTemplate");

Marker marker =  new Marker(sensorLocation.X, sensorLocation.Y);
marker.ContentTemplate = markerTemplate;            
 
<DataTemplate x:Key="MarkerTemplate">
  <map:Marker Content="{Binding Path=Name}">
    <map:Marker.ContextMenu>
      <ContextMenu>
        <MenuItem Header="Remove Placemark" Click="OnRemove_Click"/>
      </ContextMenu>
    <map:Marker.ContextMenu>
  </map:Marker>
</DataTemplate>

 None have worked so far... How do I use context menus on a marker?



 


Hi Ben,
It seems that there is nothing wrong with the way you initialize the ContextMenu and the problem may lie in somewhere else. Here is a code snippet that shows how to add a ContextMenu to a Marker, you can try to apply it to the HowDoI Sample and see if it works (I’ve tested it with the first sample, DisplayASimpleMap, it works fine).
SimpleMarkerOverlay markerOverlay = new SimpleMarkerOverlay();
Map1.Overlays.Add("MarkerOverlay", markerOverlay);
Marker marker = new Marker(-118, 30);
marker.ImageSource = new BitmapImage(new Uri("/Resources/AQUABLANK.png", UriKind.RelativeOrAbsolute));
marker.Width = 20;
marker.Height = 34;
marker.YOffset = -17;
 
ContextMenu markerContextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem();
menuItem.Header = "Test";
menuItem.Click += new RoutedEventHandler(menuItem_Click);
markerContextMenu.Items.Add(menuItem);
marker.ContextMenu = markerContextMenu;
 
markerOverlay.Markers.Add(marker);
 
 
Further questions please let me know.
Thanks.
James

Found the problem… Seems when the overlay drag mode is set to drag the default right click event is overridden and also does drag. How can I change this to only drag on left mouse button down and keep the right click as the default context menu trigger?

 


Hi Ben,
I see what’s going on. In fact, when drag mode of the MarkerOverlay is set to drag, the Overlay will handle the MouseRightButtonDown event of the Marker automatically, and the event will be treated as a sign of the beginning of drag transaction. To avoid this, we can handle this event manually, by registering the handler of this event in our application. Below is a piece of code that shows how to do it, it’s modified based on the sample I provided in the previous post.
private void AddAMarker()
        {
            SimpleMarkerOverlay markerOverlay = new SimpleMarkerOverlay();
            Map1.Overlays.Add("MarkerOverlay", markerOverlay);
            Marker marker = new Marker(-118, 30);
            marker.ImageSource = new BitmapImage(new Uri("/Resources/AQUABLANK.png", UriKind.RelativeOrAbsolute));
            marker.Width = 20;
            marker.Height = 34;
            marker.YOffset = -17;
 
            markerOverlay.Markers.Add(marker);
            markerOverlay.DragMode = MarkerDragMode.Drag;
 
            marker.MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(marker_MouseRightButtonDown);
        }
 
        void marker_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            ContextMenu markerContextMenu = new ContextMenu();
            MenuItem menuItem = new MenuItem();
            menuItem.Header = "Test";
           menuItem.Click += new RoutedEventHandler(menuItem_Click);
            markerContextMenu.Items.Add(menuItem);
 
            markerContextMenu.IsOpen = true;
            e.Handled = true;
        }
 
Thanks.
James

Thanks… that’s what i thought you were going to say…  Thanks!

Ben, 
  
 You’re welcome, feel free to let us know if you have more questions. 
  
 Thanks, 
 James