我有一个矩形,在我的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
事件时,翻译按预期发生。但这只发生过一次。我正在进入那段代码,矩形的宽度正在更新,但我还没弄清楚为什么变换没有更新。
答案 0 :(得分:2)
您将使用相同的变换替换旧变换。你需要修改现有的变换,并像使用Width一样使用+ =。
示例:
if (_rectangle.RenderTransform is TranslateTransform)
{
(_rectangle.RenderTransform as TranslateTransform).X -= 10;
}
else _rectangle.RenderTransform = new TranslateTransform(-10, 0);
答案 1 :(得分:1)
你没有改变你的变换。分配RenderTransform不会移动矩形,它会设置偏移量。在第一次分配后,您不会更改该偏移量。