我正在Path
创建带有曲线边缘的Canvas
个对象。我希望能够旋转它们并在画布上移动它们。但是当我尝试将几个变换应用于对象时,它只能直观地显示最后一个。我假设它是因为变换应用于Path
对象的坐标,并且只显示但之后不保存。
所以如果我会运行类似的东西:
my_canvas.Children[0].RenderTransform = new TranslateTransform(0, 100);
my_canvas.Children[0].RenderTransform = new TranslateTransform(0, 150);
它会将Path
150像素向下移动。
有没有办法可以保存RenderTransform
的转换进度,还是我必须使用不同的参数重新创建Path
/写一个方法来手动取代像素?
修改
另一个例子:
my_canvas.Children[0].MouseDown += (object sender, MouseButtonEventArgs e) =>
{
if (e.LeftButton == MouseButtonState.Pressed)
{
MouseDownLocation = e.GetPosition(my_canvas);
}
};
my_canvas.Children[0].MouseMove += (object sender, MouseEventArgs e) =>
{
if (e.LeftButton == MouseButtonState.Pressed)
{
my_canvas.Children[0].RenderTransform = new TranslateTransform(-(MouseDownLocation.X - e.GetPosition(my_canvas).X), -(MouseDownLocation.Y - e.GetPosition(my_canvas).Y));
}
};
此代码允许我移动我的元素,它工作正常:我可以拿起它,视觉移动它,然后放手。但只有一次。如果尝试再次尝试,它会尝试根据元素进行转换。以前的位置。当我输入这个时,我意识到我可以通过跟踪转换引起的偏移来解决这个问题。
答案 0 :(得分:0)
只需将下一个转换添加到现有RenderTransform的X和Y值:
my_canvas.Children[0].RenderTransform = new TranslateTransform(0, 100);
((TranslateTransform)my_canvas.Children[0].RenderTransform).Y += 150;
或者使用Canvas.Left和Canvas.Top而不是TranslateTransform:
UIElement element = my_canvas.Children[0];
Canvas.SetTop(element, 100);
Canvas.SetTop(element, Canvas.GetTop(element) + 150);