private void LeftMouseDown(MouseEventArgs e) { Point currentLocation = e.Location; this._clickLocation = currentLocation; Element.Element currentSelected = null; #region 节点Select检查 for (int idx = this._nodes.Count - 1; idx >= 0; idx--) { NodeElement node = this._nodes[idx]; if (node.CaughtBy(currentLocation)) { currentSelected = node; break; } else { AnchorElement anchor = node.AnchorCaughtBy(currentLocation); if (anchor != null) { currentSelected = anchor; break; } } } #endregion #region 连接Select检查 for (int idx = this._connections.Count - 1; idx >= 0; idx--) { ConnectionElement conn = this._connections[idx]; if (conn.CaughtBy(currentLocation)) { currentSelected = conn; break; } } #endregion #region 更新当前被选择的元素 if (currentSelected != this._theSelected) { if (currentSelected != null) { currentSelected.Selected = true; } if (this._theSelected != null) { this._theSelected.Selected = false; } this._theSelected = currentSelected; } #endregion this._dragging = true; // 若为锚点,则开始进行连接行为 if (!(this._theSelected is AnchorElement from)) { return; } AnchorElement tempTo = ElementFactory.AnchorElement(currentLocation.X, currentLocation.Y, null, this); ConnectionElement tempConn = ElementFactory.ConnectionElement(@from, tempTo, this); this._tempConnection = tempConn; @from.Selected = false; tempTo.Selected = true; this._theSelected = tempTo; }