我正在尝试实现一个选择工具,例如 gimp 或 photoshop 等流行图形编辑器中的选择工具,如果您在选择时按 Shift,它会保持一个比例。下面的代码是它的主要部分,为了简单起见,我把它保持为一个正方形。代码是计算鼠标位置,移动 Block 类的 X,Y 位置,然后调整它的宽度和高度。如果按下 Shift,它会形成一个正方形。如果我从右下或左下方向移动,它几乎可以正常工作,但在其他情况下,它会改变整个块的位置。任何解决方案?
private void ItemsControl_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
if (((ItemsControl)sender).IsMouseCaptured)
{
Block = new Block();
Point mpi = GuidesSnap(e.GetPosition((ItemsControl)sender));
double dx = mpi.X - mp.X;
double dy = mpi.Y - mp.Y;
switch (draggingState)
{
case 0:
if (Math.Sqrt(dx * dx + dy * dy) > 2)
draggingState = 1;
break;
case 1:
block.X = (int)Math.Round(mp.X);
block.Y = (int)Math.Round(mp.Y);
block.Width = 3;
block.Height = 3;
draggingState = 2;
break;
case 2:
if (dx < 0)
{
block.X = (int)Math.Round(mp.X + dx);
}
if (dy < 0)
{
block.Y = (int)Math.Round(mp.Y + dy);
}
block.Width = (int)Math.Abs(Math.Round(dx));
block.Height = Keyboard.Modifiers == ModifierKeys.Shift ? block.Width : (int)Math.Abs(Math.Round(dy));
break;
}
}
}