protected override void StartDrag(UIElement dragObj, MouseButtonEventArgs e) { mContainedNodes.Clear(); base.StartDrag(dragObj, e); // 计算所有在范围内的节点 int deepestZIndex = -10; var lt = ContentGrid.TranslatePoint(new Point(0, 0), ParentDrawCanvas); var rb = ContentGrid.TranslatePoint(new Point(ContentGrid.ActualWidth, ContentGrid.ActualHeight), ParentDrawCanvas); var nodes = HostNodesContainer.CtrlNodeList; for (int i = 0; i < nodes.Count; i++) { var checkNode = nodes[i]; var loc = checkNode.GetLocation(); var nRight = loc.X + checkNode.GetWidth(); var nBottom = loc.Y + checkNode.GetHeight(); if (lt.X <= loc.X && rb.X >= nRight && lt.Y <= loc.Y && rb.Y >= nBottom) { var zIndex = Canvas.GetZIndex(checkNode); if (deepestZIndex > zIndex) { deepestZIndex = zIndex; } mContainedNodes.Add(checkNode); checkNode.CalculateDeltaPt(e); } } Canvas.SetZIndex(this, deepestZIndex - 1); }