private void WpfMap_CurrentScaleChanged(object sender, CurrentScaleChangedWpfMapEventArgs e)
        {
            double currentScale = e.CurrentScale * Conversion.ConvertMeasureUnits(1, DistanceUnit.Inch, viewModel.SelectedDistanceUnit);

            viewModel.UpdateValues();
            viewModel.SelectedScale = viewModel.Scales.FirstOrDefault(s => Math.Abs(s.Scale - currentScale) < 1);
        }
 private void CurrentMap_CurrentScaleChanged(object sender, CurrentScaleChangedWpfMapEventArgs e)
 {
     if (scaleComboBox.Visibility == Visibility.Visible)
     {
         DistanceUnit unit         = ((Tuple <DistanceUnit, string>)unitComboBox.SelectedItem).Item1;
         double       currentScale = Conversion.ConvertMeasureUnits(e.CurrentScale, DistanceUnit.Inch, unit);
         scaleComboBox.SelectedItem = scaleComboBox.Items.OfType <ScaleWrapper>().FirstOrDefault(s => Math.Abs(s.Scale - currentScale) < 1);
     }
 }
        private void MapCurrentScaleChanged(object sender, CurrentScaleChangedWpfMapEventArgs e)
        {
            GisEditorWpfMap map       = sender as GisEditorWpfMap;
            LayerListItem   viewModel = null;

            if (map != null && (viewModel = layerListUserControl.DataContext as LayerListItem) != null)
            {
                var layerEntities = viewModel.Children.SelectMany(overlayEntity =>
                                                                  overlayEntity.Children.ToDictionary(layerEntity => layerEntity, layerEntity =>
                {
                    var featureLayer = layerEntity.ConcreteObject as FeatureLayer;
                    if (featureLayer != null)
                    {
                        e.CurrentExtent = GisEditor.ActiveMap.GetSnappedExtent(e.CurrentExtent);
                        var zoomLevel   = featureLayer.ZoomLevelSet.GetZoomLevelForDrawing(e.CurrentExtent, map.ActualWidth, map.MapUnit);
                        return(zoomLevel == null);
                    }
                    else
                    {
                        return(false);
                    }
                }));
                BitmapImage bitmapImage = new BitmapImage(new Uri("/GisEditorPluginCore;component/Images/Unavailable.png", UriKind.RelativeOrAbsolute));
                foreach (var item in layerEntities)
                {
                    //No style available
                    if (item.Value)
                    {
                        Image image = new Image();
                        image.BeginInit();
                        image.Source = bitmapImage;
                        image.EndInit();
                        item.Key.PreviewImage = image;
                        foreach (var styleItem in item.Key.Children)
                        {
                            styleItem.FontWeight = FontWeights.Normal;
                        }

                        //item.Key.TextStyleLabelVisibility = Visibility.Collapsed;
                    }
                    else
                    {
                        var currentZoomLevelIndex = GisEditor.ActiveMap.GetSnappedZoomLevelIndex(GisEditor.ActiveMap.CurrentScale, false) + 1;
                        foreach (var styleItemEntity in item.Key.Children.OfType <StyleLayerListItem>())
                        {
                            //var match = Regex.Match(styleItem.Text, MapElementViewModel.ZoomLevelPattern);
                            if (!string.IsNullOrEmpty(styleItemEntity.ZoomLevelRange))
                            {
                                int from  = 0;
                                int to    = 0;
                                var array = styleItemEntity.ZoomLevelRange.Split(" to ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                                if (array.Length == 2)
                                {
                                    int.TryParse(array[0].Replace("(", "").Trim(), out from);
                                    int.TryParse(array[1].Replace(")", "").Trim(), out to);
                                    if (from <= currentZoomLevelIndex && to >= currentZoomLevelIndex)
                                    {
                                        styleItemEntity.FontWeight = FontWeights.Bold;
                                    }
                                    else
                                    {
                                        styleItemEntity.FontWeight = FontWeights.Normal;
                                    }
                                }
                            }
                        }

                        FeatureLayer featureLayer = item.Key.ConcreteObject as FeatureLayer;
                        if (featureLayer != null)
                        {
                            var zoomLevel = featureLayer.ZoomLevelSet.GetZoomLevelForDrawing(e.CurrentExtent, map.ActualWidth, map.MapUnit);
                            if (zoomLevel == null)
                            {
                                break;
                            }
                            if (zoomLevel.CustomStyles.Count > 0)
                            {
                                BitmapSource bitmapSource = new BitmapImage();
                                var          styleItem    = GisEditor.StyleManager.GetStyleLayerListItem(zoomLevel.CustomStyles.LastOrDefault());
                                if (styleItem != null)
                                {
                                    bitmapSource = styleItem.GetPreviewSource(23, 23);
                                }
                                var img = new Image();
                                img.Source            = bitmapSource;
                                item.Key.PreviewImage = img;
                            }
                            else
                            {
                                var disableIconSource = new BitmapImage(new Uri("pack://application:,,,/GisEditorPluginCore;component/Images/Unavailable.png", UriKind.RelativeOrAbsolute));
                                viewModel.PreviewImage = new Image()
                                {
                                    Source = disableIconSource
                                };
                            }
                            var textStyleCount = zoomLevel.CustomStyles
                                                 .Count(style => style is IconTextStyle);
                        }
                    }
                }
            }
        }