private void Rec_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (!IsDragging) { return; } // Get the position on Canvas2 DraggedItem.SetValue(Canvas.LeftProperty, (Double)DraggedItem.GetValue(Canvas.LeftProperty) - (Double)Canvas2.GetValue(Canvas.LeftProperty)); DraggedItem.SetValue(Canvas.TopProperty, (Double)DraggedItem.GetValue(Canvas.TopProperty) - (Double)Canvas2.GetValue(Canvas.TopProperty)); // Item is on Canvas2 or not if ((Double)DraggedItem.GetValue(Canvas.LeftProperty) > 0 && (Double)DraggedItem.GetValue(Canvas.TopProperty) > 0) { IsInArea = true; } else { IsInArea = false; } // Position is legal or not if (IsInArea && (IsEmpty || IsAnchored)) { // Add to Canvas2 if (IsEmpty) { IsEmpty = false; DraggedItem.AnchorPointType = Anchors.AnchorType_FirstBlock; } else { DraggedItem.AnchorPointType = AnchorIndex; } RootCanvas.Children.Remove(DraggedItem); Canvas2.Children.Add(DraggedItem); Console.WriteLine(DateTime.Now.ToString() + " : Move <" + DraggedItem.Name + "> to <Canvas2>"); NewCanvasList.Add(DraggedItem); Console.WriteLine(DateTime.Now.ToString() + " : Add <" + DraggedItem.Name + "> to List"); // If is not anchored at the right anchor point if (AnchorIndex != (Define.AnchorNum - 1)) { // Update anchor point Anchor[1].X = (Double)DraggedItem.GetValue(Canvas.LeftProperty) + (Double)Canvas2.GetValue(Canvas.LeftProperty); Anchor[1].Y = (Double)DraggedItem.GetValue(Canvas.TopProperty) + (Double)Canvas2.GetValue(Canvas.TopProperty) + DraggedItem.Height + Anchors.VerticalMargin; Anchor[0].X = Anchor[1].X - Anchors.Indent; Anchor[0].Y = Anchor[1].Y; Anchor[2].X = Anchor[1].X + Anchors.Indent; Anchor[2].Y = Anchor[1].Y; Anchor[3].X = (Double)DraggedItem.GetValue(Canvas.LeftProperty) + (Double)Canvas2.GetValue(Canvas.LeftProperty) + DraggedItem.Width + Anchors.HorizontalMargin; Anchor[3].Y = (Double)DraggedItem.GetValue(Canvas.TopProperty) + (Double)Canvas2.GetValue(Canvas.TopProperty); Console.WriteLine(DateTime.Now.ToString() + " : Update anchor points"); } } else { // Delete illegal item Console.WriteLine(DateTime.Now.ToString() + " : Illegal placement. Delete <" + DraggedItem.Name + ">"); RootCanvas.Children.Remove(DraggedItem); DraggedItem = null; } IsDragging = false; // Update log Console.WriteLine(DateTime.Now.ToString() + " : Finish dragging"); }