Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:使用滑块旋转矩形_C#_Wpf_Rotation_Slider_Rectangles - Fatal编程技术网

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;