2012-02-08 2 views
1

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

У меня есть код Сорта, как это:

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 событие происходит перевод, как и ожидалось. Но это происходит только один раз. Я попадаю в этот блок кода, и ширина прямоугольника обновляется хорошо, но мне еще предстоит выяснить, почему преобразование не обновляется.

+0

для хихиканья я попробовать заменить RenderTransform с LayoutTransform, но ничего не произошло. –

+0

Вы пробовали называть UpdateLayout ..? по ошибке – MethodMan

+0

да У меня и не получилось :( –

ответ

2

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

Пример:

if (_rectangle.RenderTransform is TranslateTransform) 
{ 
    (_rectangle.RenderTransform as TranslateTransform).X -= 10; 
} 
else _rectangle.RenderTransform = new TranslateTransform(-10, 0); 
+0

вы можете дайте пример этому? –

+0

Обновлен мой ответ –

+0

Ahhhhh ... Я вижу. Doh! Я так привык иметь дело с преобразованиями в xaml @ _ @. Я сделал это более трудным, чем это было. Я знал, что это что-то простое! Спасибо! –

1

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

Смежные вопросы