protected override void Move(double deltaX, double deltaY) { base.Move(deltaX, deltaY); MoveChildren(deltaX, deltaY); Canvas canvas = VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(this.Parent)) as Canvas; UIElementCollection children = canvas.Children; foreach (var linkInstanceFrom in LinksFrom) { EdgeType linkFrom = GetObjectType <EdgeType>(children.Single(item => { EdgeType edgeType = GetObjectType <EdgeType>(item); return(edgeType == null ? false : edgeType.DataContext == linkInstanceFrom); })); linkFrom.MoveStartPort(deltaX, deltaY); } foreach (var linkInstanceTo in LinksTo) { EdgeType linkTo = GetObjectType <EdgeType>(children.Single(item => { EdgeType edgeType = GetObjectType <EdgeType>(item); return(edgeType == null ? false : edgeType.DataContext == linkInstanceTo); })); linkTo.MoveEndPort(deltaX, deltaY); } }
private void NodeType_SizeChanged(object sender, SizeChangedEventArgs e) { if (e.PreviousSize != new Size(0, 0)) { Canvas canvas = VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(this.Parent)) as Canvas; UIElementCollection children = canvas.Children; foreach (var linkInstanceFrom in LinksFrom) { EdgeType linkFrom = GetObjectType <EdgeType>(children.Single(item => { EdgeType edgeType = GetObjectType <EdgeType>(item); return(edgeType == null ? false : edgeType. DataContext == linkInstanceFrom); })); IEnumerable <UIElement> ports = (this.Content as Panel).Children.Where(item => item is Port); Port portFrom = ports.ElementAt((int)Math.Floor(linkFrom.PortFrom)) as Port; double portNearestPosition = linkFrom.PortFrom - Math.Floor(linkFrom.PortFrom); linkFrom.SetStartPortPosition( X + portFrom.Position.X + portFrom.TransformedWidth * portNearestPosition, Y + portFrom.Position.Y + portFrom.TransformedHeight * portNearestPosition); } foreach (var linkInstanceTo in LinksTo) { EdgeType linkTo = GetObjectType <EdgeType>(children.Single(item => { EdgeType edgeType = GetObjectType <EdgeType>(item); return(edgeType == null ? false : edgeType.DataContext == linkInstanceTo); })); IEnumerable <UIElement> ports = (this.Content as Panel).Children.Where(item => item is Port); Port portTo = ports.ElementAt((int)Math.Floor(linkTo.PortTo)) as Port; double portNearestPosition = linkTo.PortTo - Math.Floor(linkTo.PortTo); linkTo.SetEndPortPosition( X + portTo.Position.X + portTo.TransformedWidth * portNearestPosition - linkTo.X, Y + portTo.Position.Y + portTo.TransformedHeight * portNearestPosition - linkTo.Y); } } }
private void MoveChildren(double deltaX, double deltaY) { Canvas canvas = VisualTreeHelper.GetParent(VisualTreeHelper.GetParent(this.Parent)) as Canvas; UIElementCollection children = canvas.Children; foreach (var nodeInstance in (this.DataContext as NodeInstance).NodeChildren) { NodeType node = GetObjectType <NodeType>(children.Single(item => { NodeType nodeType = GetObjectType <NodeType>(item); return(nodeType == null ? false : nodeType.DataContext == nodeInstance); })); node.Move(deltaX, deltaY); } }