/// <summary> /// 更新Tabs内部停靠导航 /// </summary> /// <param name="p_pos"></param> /// <param name="p_win"></param> void UpdateCompass(Point p_pos, ToolWindow p_win) { // 获取当前位置处其他窗口中的Tabs Tabs sect = GetHitSect(p_pos, _popupPanel, p_win); if (sect == null || !CheckIsDockable(sect)) { // 当前位置处的Tabs sect = GetHitSect(p_pos, this, p_win); if (sect != null && sect.IsInCenter && !p_win.CanDockInCenter) { sect = null; } } // 有变化 if (sect != _sectWithCompass && _compass != null) { _compass.ClearIndicators(); } if (sect == null) { // 无选中区域 _sectWithCompass = null; _compass.Visibility = Visibility.Collapsed; } else { // 有停靠区域 _sectWithCompass = sect; _compass.Visibility = Visibility.Visible; double horOffset = (sect.ActualWidth - _compass.Width) / 2.0; double verOffset = (sect.ActualHeight - _compass.Height) / 2.0; Point pos = GetElementPositionRelatedToPopup(sect); double left = Math.Round((double)(horOffset + pos.X)); double top = Math.Round((double)(verOffset + pos.Y)); Canvas.SetLeft(_compass, left); Canvas.SetTop(_compass, top); _compass.ChangeDockPosition(p_pos); } }