/// <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);
                }
            }
        }
Example #2
0
        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();
        }