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); } } } }
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.