Thank you all for your solutions. HOwever, I have used Thumbs to solve this issue and it works quite well.
We have to first create a control template for the item to be dragged as follows:
<resourcedictionary>
<controltemplate x:key="rmIcon" targettype="Thumb" xmlns:x="#unknown">
<stackpanel x:name="StkRoom" horizontalalignment="Center">
<image x:name="tplImage" source="Images\lightoffsmall.png"></image>
<textblock x:name="tplTextBlock" text="User stage" foreground="White" />
</stackpanel>
</controltemplate>
</resourcedictionary>
Then I created the necessary draggable thumbs from codebehind as follows:
TmbRoom = new Thumb();
TmbRoom.Margin = new Thickness { Left = left, Top = top };
TmbRoom.Template = this.Resources["rmIcon"] as ControlTemplate;
TmbRoom.ApplyTemplate();
TmbRoom.DragDelta += new DragDeltaEventHandler(onDragDelta);
TmbRoom.PreviewMouseDown += TmbRoom_PreviewMouseDown;
TmbRoom.PreviewMouseUp += TmbRoom_PreviewMouseUp;
TextBlock txt = (TextBlock)TmbRoom.Template.FindName("tplTextBlock", TmbRoom);
txt.Text = room;
CnvsFloorPlan.Children.Add(TmbRoom);
private void onDragDelta(object sender, DragDeltaEventArgs e)
{
Thumb thumb = e.Source as Thumb;
double left = Canvas.GetLeft(thumb) + e.HorizontalChange;
double top = Canvas.GetTop(thumb) + e.VerticalChange;
Canvas.SetLeft(thumb, left);
Canvas.SetTop(thumb, top);
}
The onDragdelta function enables dragging and is easier to handle compared to conventional dragging methods in wpf.