using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Catalog; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Extensions; using ArcGIS.Desktop.Framework; using ArcGIS.Desktop.Framework.Contracts; using ArcGIS.Desktop.Framework.Dialogs; using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using System.Windows.Input; namespace ProAppModule1 { internal class MapToolSelect : MapTool { public MapToolSelect() { } protected override Task OnToolActivateAsync(bool active) { return base.OnToolActivateAsync(active); } protected override void OnToolMouseDown(MapViewMouseButtonEventArgs e) { // On mouse down check if the mouse button pressed is: // the left mouse button to handle zoom in // or the right mouse button to handle zoom out // If it is handle the event. switch (e.ChangedButton) { case MouseButton.Right: e.Handled = true; break; case MouseButton.Left: e.Handled = true; break; } } protected override Task HandleMouseDownAsync(MapViewMouseButtonEventArgs e) { // Get the map coordinates from the click point and change the Camera to zoom in or out. return QueuedTask.Run(() => { var mapClickPnt = MapView.Active.ClientToMap(e.ClientPoint); ActiveMapView.LookAt(mapClickPnt, TimeSpan.FromSeconds(1)); // zoom out if (e.ChangedButton == MouseButton.Right) { ActiveMapView.ZoomOutFixed(TimeSpan.FromSeconds(1)); } // zoom in else if (e.ChangedButton == MouseButton.Left) { ActiveMapView.ZoomInFixed(TimeSpan.FromSeconds(1)); } }); } protected override void OnToolKeyDown(MapViewKeyEventArgs k) { // using key up and down in order to zoom out and in // if those keys are used we need to mark them as handled if (k.Key == Key.Up || k.Key == Key.Down) k.Handled = true; base.OnToolKeyDown(k); } protected override Task HandleKeyDownAsync(MapViewKeyEventArgs k) { // only called when 'handled' in OnToolKeyDown if (k.Key == Key.Up) { // Key.Up => zoom out return ActiveMapView.ZoomOutFixedAsync(TimeSpan.FromSeconds(1)); } // Key.Down => zoom in //else if (k.Key == Key.Down) { return ActiveMapView.ZoomInFixedAsync(TimeSpan.FromSeconds(1)); } } } }