矩形在 MouseRightButtonDown 处旋转一次
Rectangle rotate once at MouseRightButtonDown
我需要你的帮助来解决我过去一天一直在努力解决的这个问题。我想在每次按下 rightClickButton 时将一个矩形旋转 30°。
当我在 rightClickButton.But 上单击一次时它工作正常,当我想再次右键单击时它不再旋转了。
无论是否使用 MouseButtonEventHandler,其行为都是相同的。
你能告诉我我的伪造代码有什么问题吗
提前致谢。
private void Rectangle_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
MouseButtonEventHandlerRightClick(sender, e);
}
private void MouseButtonEventHandlerRightClick(object sender, MouseButtonEventArgs e)
{
element = (Rectangle)sender;
if (Mouse.RightButton == MouseButtonState.Pressed)
{
Console.WriteLine("has cliqued right");
anc_width = element.Width;
anc_height = element.Height;
i += 1;
Console.WriteLine("before transform of guantanamera");
double angle = 30;
RotateTransform rotateTransform2 = new RotateTransform(angle);
rotateTransform2.CenterX = element.Width / 2;
rotateTransform2.CenterY = element.Height / 2;
// Console.WriteLine(element.Width / 2 + " toto "+ element.Height/2);
element.RenderTransform = rotateTransform2;
/* Canvas.SetLeft(element, Canvas.GetLeft(element)+40);
Canvas.SetTop(element, Canvas.GetTop(element));*/
}
else
{
Console.WriteLine("Releasing Element");
element = null;
}
}
您总是设置相同的角度 30°,而实际上您应该将 30° 添加到现有 RotateTransform 的 Angle
属性 的当前值。
除此之外,也不需要设置变换的中心。改为设置元素的 RenderTransformOrigin
属性。
var rotateTransform = element.RenderTransform as RotateTransform;
if (rotateTransform == null)
{
rotateTransform = new RotateTransform();
element.RenderTransform = rotateTransform;
element.RenderTransformOrigin = new Point(0.5, 0.5);
}
rotateTransform.Angle += 30;
您也可以考虑在XAML中提前设置转换:
<Rectangle RenderTransformOrigin="0.5,0.5" ...>
<Rectangle.RenderTransform>
<RotateTransform/>
</Rectangle.RenderTransform>
</Rectangle>
我需要你的帮助来解决我过去一天一直在努力解决的这个问题。我想在每次按下 rightClickButton 时将一个矩形旋转 30°。
当我在 rightClickButton.But 上单击一次时它工作正常,当我想再次右键单击时它不再旋转了。
无论是否使用 MouseButtonEventHandler,其行为都是相同的。
你能告诉我我的伪造代码有什么问题吗
提前致谢。
private void Rectangle_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
MouseButtonEventHandlerRightClick(sender, e);
}
private void MouseButtonEventHandlerRightClick(object sender, MouseButtonEventArgs e)
{
element = (Rectangle)sender;
if (Mouse.RightButton == MouseButtonState.Pressed)
{
Console.WriteLine("has cliqued right");
anc_width = element.Width;
anc_height = element.Height;
i += 1;
Console.WriteLine("before transform of guantanamera");
double angle = 30;
RotateTransform rotateTransform2 = new RotateTransform(angle);
rotateTransform2.CenterX = element.Width / 2;
rotateTransform2.CenterY = element.Height / 2;
// Console.WriteLine(element.Width / 2 + " toto "+ element.Height/2);
element.RenderTransform = rotateTransform2;
/* Canvas.SetLeft(element, Canvas.GetLeft(element)+40);
Canvas.SetTop(element, Canvas.GetTop(element));*/
}
else
{
Console.WriteLine("Releasing Element");
element = null;
}
}
您总是设置相同的角度 30°,而实际上您应该将 30° 添加到现有 RotateTransform 的 Angle
属性 的当前值。
除此之外,也不需要设置变换的中心。改为设置元素的 RenderTransformOrigin
属性。
var rotateTransform = element.RenderTransform as RotateTransform;
if (rotateTransform == null)
{
rotateTransform = new RotateTransform();
element.RenderTransform = rotateTransform;
element.RenderTransformOrigin = new Point(0.5, 0.5);
}
rotateTransform.Angle += 30;
您也可以考虑在XAML中提前设置转换:
<Rectangle RenderTransformOrigin="0.5,0.5" ...>
<Rectangle.RenderTransform>
<RotateTransform/>
</Rectangle.RenderTransform>
</Rectangle>