C# WPF:使用滑块旋转矩形
我试图在滚动滑块时旋转一个矩形 有两个步骤:单击矩形-滚动滑块。 如果我只画一个矩形,一切都好。 但当我画两个或更多的矩形并开始旋转时,我所有的矩形都以相同的角度旋转。 我对此一无所知。 有人能帮我吗? 提前谢谢! 这是我的代码:(我在这页的另一个帖子上找到了轮换的代码)C# WPF:使用滑块旋转矩形,c#,wpf,rotation,slider,rectangles,C#,Wpf,Rotation,Slider,Rectangles,我试图在滚动滑块时旋转一个矩形 有两个步骤:单击矩形-滚动滑块。 如果我只画一个矩形,一切都好。 但当我画两个或更多的矩形并开始旋转时,我所有的矩形都以相同的角度旋转。 我对此一无所知。 有人能帮我吗? 提前谢谢! 这是我的代码:(我在这页的另一个帖子上找到了轮换的代码) Shape\u Shape; RotateTransform rt=新的RotateTransform(); 私有void MyCanvas_MouseRightButtonDown(对象发送器,MouseButtonEven
Shape\u Shape;
RotateTransform rt=新的RotateTransform();
私有void MyCanvas_MouseRightButtonDown(对象发送器,MouseButtonEventArgs)
{
/////////////////////////////////////////////////////
//了解单击了哪个矩形
if(MyTransform\u type==TRANSFORM\u type.ROTATE)
{
_形状=e.原始源为形状;
如果(_shape!=null)
{
_形状=(形状)e.原始来源;
}
}
}
私有void MyCanvas_MouseRightButtonUp(对象发送器,MouseButtonEventArgs e)
{
if(MyTransform\u type!=TRANSFORM\u type.NONE&&MyTransform\u type!=TRANSFORM\u type.ROTATE)
{
如果(_shape==null)
回来
//_shape.ReleaseMouseCapture();
游标=游标。箭头;
}
}
私有void sldRotate_值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
如果(_shape!=null)
{
_shape.RenderTransform=rt;
_shape.renderTransferMorigin=新点(0.5,0.5);
var da=新的双动画(rt.Angle,sldRotate.Value,新的持续时间(TimeSpan.FromSeconds(0.001));
rt.BeginAnimation(RotateTransform.AngleProperty,da);
rt.角度=SLDROATE.值;
}
}
您的错误是创建了单个RotateTransform对象并将其指定给不同的形状。因此,单击几个矩形后,每个矩形都有相同的rotatetransform实例。如果现在更改rotatetransform的值,则每个矩形都将旋转
为了解决这个问题,您应该更改sldRotate_ValueChanged方法。检查当前形状是否已具有旋转变换。如果不是,则创建一个,如果是,则调整旋转变换
此外,如果动画时间很短,您可以将其忽略:
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);
}
}
private void sldRotate\u值已更改(对象发送方,RoutedPropertyChangedEventArgs e)
{
如果(_shape!=null)
{
var rt=新的RotateTransform();
rt.角度=SLDROATE.值;
_shape.RenderTransform=rt;
_shape.renderTransferMorigin=新点(0.5,0.5);
}
}
看起来您对所有矩形都使用了相同的名为“rt”的旋转变换。最简单的解决方案是:
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\u鼠标右键向下
_shape = e.OriginalSource as Shape;
当sldRotate\u ValueChanged执行以避免不必要的赋值时,不要每次都这样做。请添加完整的代码,例如,您在哪里设置“rt”?“rt”位于我的代码顶部:D
_shape = e.OriginalSource as Shape;