我正在Canvas
上创建具有弯曲边缘的Path
对象。我希望能够旋转它们并在画布上移动它们。但是当我尝试对对象应用几个变换时,它只在视觉上显示最后一个。我认为这是因为转换应用于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));
}
};
这段代码允许我移动我的元素,它工作得很好:我可以把它捡起来,在视觉上移动它,然后让它走。但只有一次。如果再尝试一次,它会尝试根据元素之前的位置进行转换。当我输入这个的时候,我意识到我可以通过跟踪转换引起的偏移来解决这个问题。
1条答案
按热度按时间xpcnnkqh1#
只需将下一个平移添加到现有RenderTransform的X和Y值:
或者使用Canvas.Left和Canvas.Top代替TranslateTransform: