A: 

Any reason why you are not using ResizeContainer.RenderTransfrom instead of ResizeContainer.LayoutTransform? I.e. use

ResizeContainer.LayoutTransform = scale;

If you want the scale to be linear I think you should use

double scaler = 1 - diff / ResizeContainer.ActualWidth;

EDIT:

There is a bug in the code that causes the scaled control to "jump" in size if you try to resize more than once. I suggest you do the following:

Add a RenderTransform to your ResizeContainer grid:

<Grid.RenderTransform>
    <ScaleTransform x:Name="transform" ScaleX="1" ScaleY="1" />
</Grid.RenderTransform>

Change the code in your MouseMove event handler to the following:

if (bottomResize)
{
    double newBtmX = e.GetPosition(this).X;
    double scaler = -(initBtmX - newBtmX) / grid1.ActualWidth;
    initBtmX = newBtmX;

    transform.ScaleX += scaler;
    transform.ScaleY += scaler;
}

This way you change the scale by whatever small amount the mouse has moved while dragging. All child controls within the grid should scale as well.

Jakob Christensen
I used LayoutTransform as I wanted all children to resize also, is there a way to do this nicely with RenderTransform?
Chris
Update: I just tried RenderTransform with the new scaler equation and it worked perfectly... All I need now is for the other controls to scale along with it?
Chris
Where are the other controls placed? Are they inside the usercontrol you are resizing? Can you post some more code to clarify?
Jakob Christensen
Updated with xaml - thanks
Chris
All controls within ResizeContainer should scale when applying the RenderTransform to the grid. Is that not the case?
Jakob Christensen