1

I have a rectangle and on my MouseMove event I want to transform the rectangle whenever the rectangle's width has changed.

I have code sorta like this:

private Rectangle _rectangle;

public override void OnApplyTemplate()
{
    base.OnApplyTemplate();

    _rectangle = GetTemplatedChild("PART_RangeRectangle") as Rectangle;
    if(_rectangle != null)
    {
        _rectangle.MouseMove += new MouseEventHandler(_rectangle_MouseMove);
    }
}

private void _rectangle_MouseMove(object sender, MouseEventArgs e)
{
    if(e.LeftButton == MouseButtonState.Pressed && _rectangle != null)
    { 
        _rectangle.Width += 50;
        _rectangle.RenderTransform = new TranslateTransform(-10, 0);
    }
}

My Xaml looks sorta like this:

<Grid>
    <Canvas>
        <Rectangle Name="PART_RangeRectangle" StrokeThickness="5"
            RenderTransformOrigin="0.5, 0.5" />
    <Canvas>
</Grid>

When I first trigger the MouseMove event the translation occurs as expected. But this only occurs once. I am getting into that block of code and the width of the rectangle is updating fine, but I've yet to figure out why the transform is not updating.

tshepang
  • 12,111
  • 21
  • 91
  • 136
Ashley Grenon
  • 9,305
  • 4
  • 41
  • 54

2 Answers2

2

You're replacing the old transform with an identical transform. You need to modify the existing transform and use += like you do with Width.

Example:

if (_rectangle.RenderTransform is TranslateTransform)
{
    (_rectangle.RenderTransform as TranslateTransform).X -= 10;
}
else _rectangle.RenderTransform = new TranslateTransform(-10, 0);
kitti
  • 14,663
  • 31
  • 49
1

You're not changing your transform. Assigning a RenderTransform does not move the rectangle, it sets an offset. You're not changing that offset after your first assignment.