XAML:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox x:Name="t1" HorizontalAlignment="Left" Height="23" Margin="101,43,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
        <TextBox x:Name="t2" HorizontalAlignment="Left" Height="23" Margin="101,91,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    </Grid>
</Window>

Code:

        public MainWindow()
        {
            InitializeComponent();
            Binding binding = new Binding();
            binding.Source = t1; 
            binding.Path = new PropertyPath(TextBox.TextProperty);
            BindingOperations.SetBinding(t2, TextBox.TextProperty, binding);
        }

First add a canvas:

 Set width and height to auto:

Add a button.

Now comes a tricky part, at least for me, since I don't know how to delete margins from Visual Studio GUI, so I had to do it manually from XAML. So, here is my XAML: 

<Window x:Class="DragNdrop.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas Margin="20" HorizontalAlignment="Left" VerticalAlignment="Top">
            <Button Content="Button" 
                    PreviewMouseLeftButtonDown="Button_PreviewMouseLeftButtonDown" 
                    PreviewMouseLeftButtonUp="Button_PreviewMouseLeftButtonUp" 
                    PreviewMouseMove="Button_PreviewMouseMove"/>
        </Canvas>
    </Grid>
</Window>

Notice that margins from button node are deleted, and margin is equal 20 on canvas (Margin="20"), otherwise button will be away from mouse pointer.

Code looks like this: 

public partial class MainWindow : Window
{
	private double FirstXPos;
	private double FirstYPos;
	private double FirstArrowXPos;
	private double FirstArrowYPos;
	private object MovingObject;
	public MainWindow()
	{
		InitializeComponent();
	}

	private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
	{
		FirstXPos = e.GetPosition(sender as Control).X;
		FirstYPos = e.GetPosition(sender as Control).Y;
		FirstArrowXPos = e.GetPosition((sender as Control).Parent as Control).X - FirstXPos - 20;
		FirstArrowYPos = e.GetPosition((sender as Control).Parent as Control).Y - FirstYPos - 20;
		MovingObject = sender;
	}

	private void Button_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
	{
		MovingObject = null;
	}

	private void Button_PreviewMouseMove(object sender, MouseEventArgs e)
	{
		if (e.LeftButton == MouseButtonState.Pressed && sender == MovingObject)
		{
			(sender as Control).SetValue(Canvas.LeftProperty,
				 e.GetPosition((sender as Control).Parent as Control).X - FirstXPos - 20);

			(sender as Control).SetValue(Canvas.TopProperty,
				 e.GetPosition((sender as Control).Parent as Control).Y - FirstYPos - 20);
		}
	}
}

Code you can download from here, dirty as usual and made in VS 2013

<Grid>
	<TextBox Height="194" HorizontalAlignment="Stretch" Name="textBox1" VerticalAlignment="Bottom" TextWrapping="Wrap" AcceptsReturn="True" />
</Grid>

Most important values are: 

TextWrapping="Wrap"

and

AcceptsReturn="True"

Or in properties:

and

If varible is string, then to check if it is null use:

if (containerid.IsNullOrEmpty())
{  containerid = "-1"; }

Or String.IsNullOrEmpty()

Because null is not empty...