ArcGISWindowsPhoneSDK.WebMapDynamicServicePopups.MyMap_MapGesture C# (CSharp) Method

MyMap_MapGesture() private method

private MyMap_MapGesture ( object sender, Map e ) : void
sender object
e Map
return void
        private void MyMap_MapGesture(object sender, Map.MapGestureEventArgs e)
        {
            if (e.Gesture == GestureType.Tap)
            {
                MyInfoWindow.IsOpen = false;

                double mapScale = MyMap.Scale;

                ArcGISDynamicMapServiceLayer alayer = null;
                DataTemplate dt = null;
                int layid = 0;

                foreach (Layer layer in MyMap.Layers)
                {
                    if (layer.GetValue(Document.PopupTemplatesProperty) != null)
                    {
                        alayer = layer as ArcGISDynamicMapServiceLayer;
                        IDictionary<int, DataTemplate> idict = layer.GetValue(Document.PopupTemplatesProperty) as IDictionary<int, DataTemplate>;
                        foreach (LayerInfo linfo in alayer.Layers)
                        {
                            if (((mapScale > linfo.MaxScale // in scale range
                                && mapScale < linfo.MinScale) ||
                                (linfo.MaxScale == 0.0 // no scale dependency
                                && linfo.MinScale == 0.0) ||
                                (mapScale > linfo.MaxScale // minscale = 0.0 = infinity
                                && linfo.MinScale == 0.0)) &&
                                idict.ContainsKey(linfo.ID)) // id present in dictionary
                            {
                                layid = linfo.ID;
                                dt = idict[linfo.ID];
                                break;
                            }
                        }
                    }
                }

                if (dt != null)
                {
                    QueryTask qt = new QueryTask(string.Format("{0}/{1}", alayer.Url, layid));
                    qt.ExecuteCompleted += (s, qe) =>
                    {
                        if (qe.FeatureSet.Features.Count > 0)
                        {
                            Graphic g = qe.FeatureSet.Features[0];
                            MyInfoWindow.Anchor = e.MapPoint;
                            MyInfoWindow.ContentTemplate = dt;
                            MyInfoWindow.Content = g.Attributes;
                            MyInfoWindow.IsOpen = true;
                        }
                    };

                    ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query();
                    double contractRatio = MyMap.Extent.Width / 20;
                    Envelope inputEnvelope = new Envelope(e.MapPoint.X - contractRatio,
                        e.MapPoint.Y - contractRatio,
                        e.MapPoint.X + contractRatio,
                        e.MapPoint.Y + contractRatio);
                    inputEnvelope.SpatialReference = MyMap.SpatialReference;
                    query.Geometry = inputEnvelope;
                    query.OutSpatialReference = MyMap.SpatialReference;
                    query.OutFields.Add("*");

                    qt.ExecuteAsync(query);
                }
            }
        }