/// <summary> /// Toggles between measure modes and starts SketchEditor when not already started for length and area. /// </summary> /// <param name="sender">Toggle button that raised click event</param> /// <param name="e">Contains information or event data associated with routed event</param> private async void OnToggleMeasureMode(object sender, RoutedEventArgs e) { var toggleButton = (ToggleButton)sender; Mode = toggleButton.IsChecked.HasValue && toggleButton.IsChecked.Value ? (toggleButton == _measureLengthButton ? MeasureToolbarMode.Line : toggleButton == _measureAreaButton ? MeasureToolbarMode.Area : toggleButton == _measureFeatureButton ? MeasureToolbarMode.Feature : MeasureToolbarMode.None) : MeasureToolbarMode.None; if (MapView.SketchEditor.Geometry == null && (Mode == MeasureToolbarMode.Line || Mode == MeasureToolbarMode.Area)) { try { var creationMode = Mode == MeasureToolbarMode.Line ? SketchCreationMode.Polyline : SketchCreationMode.Polygon; var geometry = await MapView.SketchEditor.StartAsync(creationMode); DisplayResult(geometry); } catch (TaskCanceledException) { } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message, ex.GetType().Name); } } }
public override void OnApplyTemplate() #endif { base.OnApplyTemplate(); _measureLengthButton = GetTemplateChild("MeasureLength") as ToggleButton; if (_measureLengthButton != null) { _measureLengthButton.Click += OnToggleMeasureMode; } _measureAreaButton = GetTemplateChild("MeasureArea") as ToggleButton; if (_measureAreaButton != null) { _measureAreaButton.Click += OnToggleMeasureMode; } _measureFeatureButton = GetTemplateChild("MeasureFeature") as ToggleButton; if (_measureFeatureButton != null) { _measureFeatureButton.Click += OnToggleMeasureMode; } _clearButton = GetTemplateChild("Clear") as ButtonBase; if (_clearButton != null) { _measureFeatureResultOverlay.Graphics.CollectionChanged += (s, e) => { if (Mode == MeasureToolbarMode.Feature) { _clearButton.IsEnabled = _measureFeatureResultOverlay.Graphics.Any(); AddMeasureFeatureResultOverlay(MapView); } }; _clearButton.Click += OnClear; } _measureResultTextBlock = GetTemplateChild("MeasureResult") as TextBlock; _linearUnitsSelector = GetTemplateChild("LinearUnitsSelector") as UIElement; _areaUnitsSelector = GetTemplateChild("AreaUnitsSelector") as UIElement; if (LinearUnits == null || !LinearUnits.Any()) { LinearUnits = new LinearUnit[] { Geometry.LinearUnits.Centimeters, Geometry.LinearUnits.Feet, Geometry.LinearUnits.Inches, Geometry.LinearUnits.Kilometers, Geometry.LinearUnits.Meters, Geometry.LinearUnits.Miles, Geometry.LinearUnits.Millimeters, Geometry.LinearUnits.NauticalMiles, Geometry.LinearUnits.Yards }; } if (SelectedLinearUnit == null) { SelectedLinearUnit = LinearUnits.Any(u => u == Geometry.LinearUnits.Meters) ? Geometry.LinearUnits.Meters : LinearUnits.FirstOrDefault(); } if (AreaUnits == null || !AreaUnits.Any()) { AreaUnits = new AreaUnit[] { Geometry.AreaUnits.Acres, Geometry.AreaUnits.Hectares, Geometry.AreaUnits.SquareCentimeters, Geometry.AreaUnits.SquareDecimeters, Geometry.AreaUnits.SquareFeet, Geometry.AreaUnits.SquareKilometers, Geometry.AreaUnits.SquareMeters, Geometry.AreaUnits.SquareMiles, Geometry.AreaUnits.SquareMillimeters, Geometry.AreaUnits.SquareYards }; } if (SelectedAreaUnit == null) { SelectedAreaUnit = AreaUnits.Any(u => u == Geometry.AreaUnits.SquareMiles) ? Geometry.AreaUnits.SquareMiles : AreaUnits.FirstOrDefault(); } if (LineSketchEditor == null) { LineSketchEditor = new SketchEditor(); } if (AreaSketchEditor == null) { AreaSketchEditor = new SketchEditor(); } if (SelectionLineSymbol == null) { SelectionLineSymbol = LineSketchEditor?.Style?.LineSymbol; } if (SelectionFillSymbol == null) { SelectionFillSymbol = AreaSketchEditor?.Style?.FillSymbol; } Mode = MeasureToolbarMode.None; PrepareMeasureMode(); }