public partial class Page : UserControl
{bool isDragDropInEffect = false;Point pos; public Page(){ InitializeComponent(); // Loop through all the UIElements in the Canvas // and attach Mouse Event Handlers to the Element foreach (UIElement uiEle in CanvasParent.Children) { uiEle.MouseMove += new MouseEventHandler(Element_MouseMove); uiEle.MouseLeftButtonDown += new MouseButtonEventHandler(Element_MouseLeftButtonDown); uiEle.MouseLeftButtonUp += new MouseButtonEventHandler(Element_MouseLeftButtonUp); }} void Element_MouseMove(object sender, MouseEventArgs e){ if (isDragDropInEffect) { FrameworkElement currEle = sender as FrameworkElement; // Retrieving the item's current x and y position double xPos = e.GetPosition(null).X - pos.X; double yPos = e.GetPosition(null).Y - pos.Y; // Re-position Element currEle.SetValue(Canvas.TopProperty, yPos + (double)currEle.GetValue(Canvas.TopProperty)); currEle.SetValue(Canvas.LeftProperty, xPos + (double)currEle.GetValue(Canvas.LeftProperty)); // Reset the new position value pos = e.GetPosition(null); }} void Element_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){ FrameworkElement fEle = sender as FrameworkElement; isDragDropInEffect = true; // x and y coords of mouse pointer position pos = e.GetPosition(null); // Enable mouse capture on element fEle.CaptureMouse(); // Set the cursor to 'Hand' when mouse pointer is over element fEle.Cursor = Cursors.Hand;} void Element_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){ if (isDragDropInEffect) { FrameworkElement ele = sender as FrameworkElement; isDragDropInEffect = false; // Removes Mouse Capture from Element being dragged ele.ReleaseMouseCapture(); }}
}
這段代碼把CanvasContent裡的元素都變成可拖拽的.