using System; using System.ComponentModel.Composition; using System.Windows.Interactivity; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Extensibility; namespace IndentifyFix.AddIns { [Export(typeof(Behavior<Map>))] [DisplayName("IdentifyFix")] [ESRI.ArcGIS.Client.Extensibility.Category("TEP Tools")] [ESRI.ArcGIS.Client.Extensibility.Description("Fix the identify tool so that it only hits the visible layers")] public class IdentifyVisible : Behavior<Map> { #region Behavior Overrides protected override void OnAttached() { base.OnAttached(); MapApplication.Current.Initialized += new EventHandler(Current_Initialized); MapApplication.Current.Map.Layers.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Layers_CollectionChanged); } #endregion void Current_Initialized(object sender, EventArgs e) { AddEventHandlers(); MapApplication.Current.Initialized -= new EventHandler(Current_Initialized); } private void AddEventHandlers() { foreach (Layer layer in MapApplication.Current.Map.Layers) { if ((layer as ArcGISDynamicMapServiceLayer) != null) { ArcGISDynamicMapServiceLayer agsDynamicLayer = (layer as ArcGISDynamicMapServiceLayer); agsDynamicLayer.VisibilityChanged += new EventHandler<EventArgs>(ArcGISDynamicMapServiceLayer_VisibilityChanged); UpdateIndentify(agsDynamicLayer); } } } private void Layers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { foreach (var item in e.NewItems) { if (item is ArcGISDynamicMapServiceLayer) { ArcGISDynamicMapServiceLayer agsDynamicLayer = (item as ArcGISDynamicMapServiceLayer); agsDynamicLayer.VisibilityChanged += new EventHandler<EventArgs>(ArcGISDynamicMapServiceLayer_VisibilityChanged); UpdateIndentify(agsDynamicLayer); agsDynamicLayer.VisibilityChanged += new EventHandler<EventArgs>(ArcGISDynamicMapServiceLayer_VisibilityChanged); } } } if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove) { foreach (var item in e.OldItems) { if (item is ArcGISDynamicMapServiceLayer) { (item as ArcGISDynamicMapServiceLayer).VisibilityChanged -= new EventHandler<EventArgs>(ArcGISDynamicMapServiceLayer_VisibilityChanged); } } } } void ArcGISDynamicMapServiceLayer_VisibilityChanged(object sender, EventArgs e) { ArcGISDynamicMapServiceLayer agsDynamicLayer = sender as ArcGISDynamicMapServiceLayer; UpdateIndentify(agsDynamicLayer); } private static void UpdateIndentify(ArcGISDynamicMapServiceLayer agsDynamicLayer) { if (agsDynamicLayer != null) { System.Collections.ObjectModel.Collection<int> visibleLayers = new System.Collections.ObjectModel.Collection<int>(); if (agsDynamicLayer.VisibleLayers != null) { foreach (var i in agsDynamicLayer.VisibleLayers) { visibleLayers.Add(i); } } else { foreach (var li in agsDynamicLayer.Layers) { if (li.DefaultVisibility == true) visibleLayers.Add(li.ID); } } ESRI.ArcGIS.Mapping.Core.LayerExtensions.SetIdentifyLayerIds(agsDynamicLayer as Layer, visibleLayers); } } } }
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.