public ProSnippetMapTool() { //Set the MapTool base class' OverlayControlID to the DAML id of your embeddable control in the constructor this.OverlayControlID = "ProAppModule1_EmbeddableControl1"; } protected override void OnToolMouseDown(MapViewMouseButtonEventArgs e) { if (e.ChangedButton == System.Windows.Input.MouseButton.Left) e.Handled = true; } protected override Task HandleMouseDownAsync(MapViewMouseButtonEventArgs e) { return QueuedTask.Run(() => { //assign the screen coordinate clicked point to the MapTool base class' OverlayControlLocation property. this.OverlayControlPositionRatio = e.ClientPoint; }); }
// Using the Visual Studio SDK templates, add a MapTool and an EmbeddableControl // The EmbeddableControl is registered in the "esri_embeddableControls" category in the config.daml file // // <categories> // <updateCategory refID = "esri_embeddableControls" > // <insertComponent id="mapTool_EmbeddableControl" className="EmbeddableControl1ViewModel"> // <content className = "EmbeddableControl1View" /> // </insertComponent> // <updateCategory> // </categories> internal class MapTool_WithOverlayControl : MapTool { public MapTool_WithOverlayControl() { // substitute this string with the daml ID of the embeddable control you added OverlayControlID = "mapTool_EmbeddableControl"; } protected override void OnToolMouseDown(MapViewMouseButtonEventArgs e) { e.Handled = true; } protected override Task HandleMouseDownAsync(MapViewMouseButtonEventArgs e) { //Get the instance of the ViewModel var vm = OverlayEmbeddableControl; if (vm == null) return Task.FromResult(0); // cast vm to your viewModel in order to access your properties //Get the map coordinates from the click point and set the property on the ViewMode. return QueuedTask.Run(() => { var mapPoint = MapView.Active.ClientToMap(e.ClientPoint); string clickText = string.Format("X: {0}, Y: {1}, Z: {2}", mapPoint.X, mapPoint.Y, mapPoint.Z); }); } }
Target Platforms: Windows 11, Windows 10