2012-02-08 17 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

的笑聲我曾嘗試與LayoutTransform但沒有更換的RenderTransform發生。 – 2012-02-08 20:30:21

+0

你有沒有試過調用UpdateLayout ..?偶然 – MethodMan 2012-02-08 20:42:12

+0

是的,我有和沒有運氣:( – 2012-02-08 20:43:42

回答

2

您將用相同的變換替換舊的變換。您需要修改現有的變換並使用+ =,就像使用Width一樣。

例子:

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

can you – 2012-02-08 21:02:51

+0

已更新我的回答 – 2012-02-08 21:06:19

+0

Ahhhhh ...我明白了,Doh!我很習慣於處理xaml @ _ @中的變換,這使得它變得更加困難,我知道它是一些簡單的!謝謝! – 2012-02-08 21:08:45

1

你沒有改變你的轉換。分配RenderTransform不會移動矩形,它會設置偏移量。你在第一次分配後沒有改變這個偏移量。