Надеюсь, это то, что вы ищете.
"Логика перетаскивания мыши довольно проста: в обработчике OnMouseDown вы сохраняете положение объекта, который вы хотите перетащить, и указателя мыши, и вызываете CaptureMouse. В OnMouseMove вы вычисляете разницу между координатами текущая позиция указателя мыши и сохраненная позиция, и добавьте ее к исходной позиции объекта. (Если вы находитесь на Canvas, вы можете переместить объект, вызвав Canvas.SetLeft и Canvas.SetTop для объекта; в противном случае вы можете настроить Для объекта TranslateTransform задано свойство объекта RenderTransform.) В OnMouseUp вызывается ReleaseCapture.
Поскольку ваше приложение может потерять захват мыши другими способами (например, появление системного модального окна сообщения), вы также захотите переопределить OnLostMouseCapture, чтобы прервать операцию перетаскивания (если оно не завершено с помощью OnMouseUp) и выполнить очистку. Вы также можете переопределить OnTextInput, чтобы прервать перетаскивание, если пользователь нажмет клавишу Escape. "
Скопировано с http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b6c51eef-269e-4c85-96af-b5b1e4cb9bd5/. На этом сайте также есть код для того, как это сделать.