为什么我的RenderTransform只出现一次?

时间:2012-02-08 20:28:58

标签: c# wpf translation transformation

我有一个矩形,在我的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 个答案:

答案 0 :(得分:2)

您将使用相同的变换替换旧变换。你需要修改现有的变换,并像使用Width一样使用+ =。

示例:

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

答案 1 :(得分:1)

你没有改变你的变换。分配RenderTransform不会移动矩形,它会设置偏移量。在第一次分配后,您不会更改该偏移量。