Example #1
0
 /// <summary>
 /// 控件加载完毕
 /// </summary>
 /// <param name="sender">事件发送者</param>
 /// <param name="e">事件数据源</param>
 protected virtual void OnLoaded(object sender, RoutedEventArgs e)
 {
     this.m_markControl.Loaded -= new RoutedEventHandler(OnLoaded);
     if (m_markControl != null && m_markControl.Parent is MarkLayer)
     {
         m_markLayer    = m_markControl.Parent as MarkLayer;
         m_mapContainer = m_markLayer.MapContainer;
         if (m_mapContainer != null)
         {
             if (m_xLogicChange || m_yLogicChange)
             {
                 double ml_x = Canvas.GetLeft(this.m_markLayer);
                 double ml_y = Canvas.GetTop(this.m_markLayer);
                 double w    = double.IsNaN(m_markControl.Width) ? 0 : m_markControl.Width / 2;   //m_markControl.ActualWidth / 2;//
                 double h    = double.IsNaN(m_markControl.Height) ? 0 : m_markControl.Height / 2; //m_markControl.ActualHeight / 2;//
                 if (m_coordinateType == CoordinateType.Logic && m_mapContainer != null)
                 {
                     Point pnt = m_mapContainer.LogicToScreen(m_x, m_y);
                     if (!double.IsNaN(pnt.X) && !double.IsNaN(pnt.Y))
                     {
                         Canvas.SetLeft(m_markControl, pnt.X - w - ml_x);
                         Canvas.SetTop(m_markControl, pnt.Y - h - ml_y);
                     }
                 }
                 else
                 {
                     Canvas.SetLeft(m_markControl, m_x - w - ml_x);
                     Canvas.SetTop(m_markControl, m_y - h - ml_y);
                 }
             }
             if (m_enableDrag)
             {
                 m_mapContainer.MouseMove += new MouseEventHandler(OnMouseMove);
             }
             else
             {
                 m_mapContainer.MouseMove -= new MouseEventHandler(OnMouseMove);
             }
         }
     }
     m_yLogicChange = false;
     m_xLogicChange = false;
 }
Example #2
0
        /// <summary>
        /// 修正位置(只在坐标系是逻辑坐标时有效)
        /// </summary>
        /// <param name="isZoom">是否是放缩时修正位置</param>
        /// <param name="enableMarkHiden">是否允许判断并隐藏不在可视范围的标注</param>
        public virtual void RevisedPosition(bool isZoom = true, bool enableMarkHiden = true)
        {
            if (this.TargetMark == null && m_coordinateType == CoordinateType.Logic && m_markControl != null &&
                m_mapContainer != null && m_markLayer != null && !m_mapContainer.IsMoveing)
            {
                if (enableMarkHiden)
                {
                    if (IsInMapViewBound)
                    {
                        if (isZoom || (m_markControl.Visibility == Visibility.Collapsed && !isZoom))
                        {
                            try
                            {
                                double ml_x = Canvas.GetLeft(this.m_markLayer);
                                double ml_y = Canvas.GetTop(this.m_markLayer);
                                Point  pnt  = m_mapContainer.LogicToScreen(m_x, m_y);
                                if (!double.IsNaN(pnt.X) && !double.IsNaN(pnt.Y))
                                {
                                    double w = double.IsNaN(m_markControl.Width) ? 0 : m_markControl.Width / 2;   //m_markControl.ActualWidth / 2;//
                                    double h = double.IsNaN(m_markControl.Height) ? 0 : m_markControl.Height / 2; //m_markControl.ActualHeight / 2;//
                                    Canvas.SetLeft(m_markControl, pnt.X - w - ml_x + OffsetX);
                                    Canvas.SetTop(m_markControl, pnt.Y - h - ml_y + OffsetY);
                                    if (m_markControl.Visibility == Visibility.Collapsed)
                                    {
                                        this.m_markControl.Visibility = Visibility.Visible;
                                    }
                                }
                            }
                            catch { }
                        }
                    }
                    else if (m_markControl.Visibility == Visibility.Visible)
                    {
                        m_markControl.Visibility = Visibility.Collapsed;
                    }

                    if (MarkReviseOverCallback != null && isZoom)
                    {
                        MarkReviseOverCallback(this);
                    }
                }
                else
                {
                    if (isZoom)
                    {
                        try
                        {
                            double ml_x = Canvas.GetLeft(this.m_markLayer);
                            double ml_y = Canvas.GetTop(this.m_markLayer);
                            Point  pnt  = m_mapContainer.LogicToScreen(m_x, m_y);
                            if (!double.IsNaN(pnt.X) && !double.IsNaN(pnt.Y))
                            {
                                double w = double.IsNaN(m_markControl.Width) ? 0 : m_markControl.Width / 2;   //m_markControl.ActualWidth / 2;//
                                double h = double.IsNaN(m_markControl.Height) ? 0 : m_markControl.Height / 2; //m_markControl.ActualHeight / 2;//
                                Canvas.SetLeft(m_markControl, pnt.X - w - ml_x + OffsetX);
                                Canvas.SetTop(m_markControl, pnt.Y - h - ml_y + OffsetY);
                                if (m_markControl.Visibility == Visibility.Collapsed)
                                {
                                    this.m_markControl.Visibility = Visibility.Visible;
                                }
                            }
                        }
                        catch { }

                        if (MarkReviseOverCallback != null)
                        {
                            MarkReviseOverCallback(this);
                        }
                    }
                }
            }
        }