/// <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; }
/// <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); } } } } }