Почему мой RenderTransform происходит только один раз? - PullRequest
1 голос
/ 09 февраля 2012

У меня есть прямоугольник, и на моем MouseMove событии я хочу преобразовать прямоугольник всякий раз, когда ширина прямоугольника изменилась.

У меня есть такой код:

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);
    }
}

Мой Xaml выглядит примерно так:

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

Когда я впервые запускаю событие MouseMove, перевод происходит, как и ожидалось. Но это происходит только один раз. Я вхожу в этот блок кода, и ширина прямоугольника обновляется нормально, но мне еще предстоит выяснить, почему преобразование не обновляется.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Вы заменяете старое преобразование идентичным преобразованием.Вам нужно изменить существующее преобразование и использовать + =, как вы делаете с Width.

Пример:

if (_rectangle.RenderTransform is TranslateTransform)
{
    (_rectangle.RenderTransform as TranslateTransform).X -= 10;
}
else _rectangle.RenderTransform = new TranslateTransform(-10, 0);
1 голос
/ 09 февраля 2012

Вы не меняете свое преобразование.Присвоение RenderTransform не перемещает прямоугольник, он устанавливает смещение.Вы не измените это смещение после первого назначения.

...