내 요구 사항에 대한 첨부 된 이미지를 찾으십시오. 원호를 드래그하여 (원호) 원호와 휠이 마우스 위치를 회전합니다. 제발 나를 도와주십시오. 원호와 바퀴를 회전하면 버튼이 작동합니다. 그러나이 회전을 국경 (원호)으로 돌리고 싶습니다 .i가 계산에 걸렸습니다. 이 라인에테두리를 드래그하여 타원과 테두리를 회전하는 방법은 무엇입니까?
if (angle >= 360)
angle = 0;
angle += 30;
:
XAML:
<Grid HorizontalAlignment="Center">
<StackPanel Orientation="Horizontal" x:Name="mainStackPanel" RenderTransformOrigin="0.5,0.5">
<Grid>
<Border BorderThickness="10" BorderBrush="Blue" MouseMove="Border_MouseMove" MouseLeftButtonDown="Border_MouseLeftButtonDown"
MouseLeftButtonUp="Border_MouseLeftButtonUp" Width="10" Height="90" />
</Grid>
<Grid x:Name="rotateGrid" Margin="20 0 0 0" RenderTransformOrigin="0.5,0.5">
<Ellipse Height="250" Width="250" Stroke="Red" StrokeThickness="20"/>
<Border BorderThickness="10" BorderBrush="Red" Height="15" Width="250"
HorizontalAlignment="Stretch" VerticalAlignment="Center"/>
<Border BorderThickness="10" BorderBrush="Red" Width="15" Height="250"
HorizontalAlignment="Center" VerticalAlignment="Stretch"/>
<Border BorderThickness="10" BorderBrush="Red" Width="15" Height="246" RenderTransformOrigin="0.5,0.5"
HorizontalAlignment="Center" VerticalAlignment="Stretch">
<Border.RenderTransform>
<RotateTransform Angle="45"/>
</Border.RenderTransform>
</Border>
<Border BorderThickness="10" BorderBrush="Red" Width="15" Height="246" RenderTransformOrigin="0.5,0.5"
HorizontalAlignment="Center" VerticalAlignment="Stretch">
<Border.RenderTransform>
<RotateTransform Angle="135"/>
</Border.RenderTransform>
</Border>
</Grid>
<Grid Margin="20 0 0 0">
<Border BorderThickness="10" BorderBrush="Blue" Width="10" Height="90" />
</Grid>
</StackPanel>
Code Behind:
RotateTransform trans = new RotateTransform();
double angle = 30;
Point oldPoint;
Point newPoint;
bool dragStarted = false;
private void Button_Click(object sender, RoutedEventArgs e)
{
trans.Angle = angle;
mainStackPanel.RenderTransform = trans;
if (angle >= 360)
angle = 0;
angle += 30;
}
private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
dragStarted = true;
oldPoint = e.GetPosition(this);
Mouse.Capture(sender as IInputElement);
}
private void Border_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Mouse.Capture(null);
oldPoint = new Point(0, 0);
newPoint = new Point(0, 0);
dragStarted = false;
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
Mouse.Capture(null);
oldPoint = new Point(0, 0);
newPoint = new Point(0, 0);
dragStarted = false;
base.OnMouseLeftButtonUp(e);
}
private void Border_MouseMove(object sender, MouseEventArgs e)
{
if (dragStarted)
{
newPoint = e.GetPosition(this);
if (oldPoint.Y != newPoint.Y)
{
if (oldPoint.Y > newPoint.Y)
trans.Angle = (oldPoint.Y - newPoint.Y);
else
trans.Angle += (newPoint.Y - oldPoint.Y);
mainStackPanel.RenderTransform = trans;
}
}
}
* 작동하지 않는 것은 무엇입니까? 당신의 * 정확한 * 문제가 무엇입니까? – Sheridan
바퀴의 회전이 부드럽게 작동하지 않습니다. 어느 시점에서 역방향으로 작동하기 시작했습니다. 문제는 회전 각도 만 계산하는 것입니다. – Ravuthasamy