我在滚动滑块时尝试旋转矩形 有两个步骤:单击一个矩形 - 滚动滑块。 如果我只画一个矩形,一切都还可以。 但是当我绘制2个或更多的矩形并开始旋转时,我的所有矩形都以相同的角度旋转。 我不知道这个。 谁能帮我? 提前致谢! 这是我的代码:(我在本页的另一篇文章中找到了旋转的代码)
Shape _shape;
RotateTransform rt = new RotateTransform();
private void MyCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs)
{
/////////////////////////////////////////////////////
//for know which rectangle has been clicked
if (MyTransform_type == TRANSFORM_TYPE.ROTATE)
{
_shape = e.OriginalSource as Shape;
if (_shape != null)
{
_shape = (Shape)e.OriginalSource;
}
}
}
private void MyCanvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
if (MyTransform_type != TRANSFORM_TYPE.NONE && MyTransform_type != TRANSFORM_TYPE.ROTATE)
{
if (_shape == null)
return;
//_shape.ReleaseMouseCapture();
Cursor = Cursors.Arrow;
}
}
private void sldRotate_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (_shape != null)
{
_shape.RenderTransform = rt;
_shape.RenderTransformOrigin = new Point(0.5, 0.5);
var da = new DoubleAnimation(rt.Angle, sldRotate.Value, new Duration(TimeSpan.FromSeconds(0.001)));
rt.BeginAnimation(RotateTransform.AngleProperty, da);
rt.Angle = sldRotate.Value;
}
}
答案 0 :(得分:0)
您的错误在于您创建了一个RotateTransform对象并将其分配给不同的形状。因此,在单击几个矩形后,每个矩形都具有相同的rotatetransform实例。如果现在更改rotatetransform的值,则每个矩形都将旋转...
为了解决这个问题,你应该改变你的sldRotate_ValueChanged方法。检查当前形状是否已经是旋转变换。如果没有则创建一个,如果是,则调整rotatetransform ...
此外,如果你有这么小的动画时间,你可以把它留下来:
private void sldRotate_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (_shape != null)
{
var rt = new RotateTransform();
rt.Angle = sldRotate.Value;
_shape.RenderTransform = rt;
_shape.RenderTransformOrigin = new Point(0.5, 0.5);
}
}
答案 1 :(得分:0)
看起来您正在为所有矩形使用名为“rt”的相同RotateTransform。最简单的解决方案是:
private void MyCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs)
{
if (MyTransform_type == TRANSFORM_TYPE.ROTATE)
{
_shape = e.OriginalSource as Shape;
//creating new RotateTransform
rt=new RotateTransform();
if (_shape != null)
{
_shape = (Shape)e.OriginalSource;
}
}
}
你也可以做到
_shape.RenderTransform = rt;
之后的MyCanvas_MouseRightButtonDown中的
_shape = e.OriginalSource as Shape;
执行sldRotate_ValueChanged以避免不必要的分配,而不是每次都这样做。