How to resize WPF controls on a grid at runtime (keeping aspect ratio)

I'm currently working on a C# WPF application which contains a fullscreen Grid with controls that are dynamically added to it at runtime. I have code in place to allow the user to move these controls across the Grid with mouse events. What I now want to do is allow the user to also resize the controls (while keeping the aspect ratio), also at runtime. I have seen various tutorials describing how to do this using a Canvas (and Thumb controls), but none on a Grid. As I cannot use a Canvas in my application, is there an efficient way to implement this on a grid? To give you an idea of what my code looks like, I placed my mouse events below:

    public static void Control_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) //HUD element left mouse button up
    {
        (sender as UIElement).Opacity = 1;
        Functions.SetObjectProperty(sender, "Cursor", Cursors.Hand);
        if (_isInDrag)
        {
            var element = sender as FrameworkElement;
            element.ReleaseMouseCapture();
            _isInDrag = false;
            e.Handled = true;
            UpdateControlTag(sender);

        }           
    }
    public static void Control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) //HUD element left mouse button down
    {
        if (HUDEditMode)
        {
            Functions.SetObjectProperty(sender, "Cursor", Cursors.SizeAll);
            (sender as UIElement).Opacity = .5;
            var element = sender as FrameworkElement;
            _anchorPoint = e.GetPosition(null);
            element.CaptureMouse();
            _isInDrag = true;
            e.Handled = true;
        }
    }
    public static void Control_MouseMove(object sender, MouseEventArgs e) //Drag & drop HUD element
    {
        if (_isInDrag) // The user is currently dragging the HUD element...
        {
            _currentPoint = e.GetPosition(null);
            TranslateTransform tt = new TranslateTransform();
            bool isMoved = false;
            if (PointDict.ContainsKey(sender))
            {
                tt = PointDict[sender];
                isMoved = true;
            }
            tt.X += _currentPoint.X - _anchorPoint.X;
            tt.Y += (_currentPoint.Y - _anchorPoint.Y);
            _anchorPoint = _currentPoint;
            (sender as UIElement).RenderTransform = tt;
            if (isMoved)
            {
                PointDict.Remove(sender);
            }
            PointDict.Add(sender, tt);       
        }
    }