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;
}
}
}