C# 在不使用“水平对齐”或“垂直对齐”设置为“左”和“上”的情况下,有哪些不同的方法可以拖动和移动对象

C# 在不使用“水平对齐”或“垂直对齐”设置为“左”和“上”的情况下,有哪些不同的方法可以拖动和移动对象,c#,wpf,drag,resize,mousemove,C#,Wpf,Drag,Resize,Mousemove,我正在开发一个仪表板应用程序,我希望用户能够调整其图表小部件的大小,并将其移动到他们喜欢的地方。我在能够同时移动和调整大小方面遇到了问题。原因是当图表对齐设置为以下值时: chart.HorizontalAlignment = HorizontalAlignment.Left; chart.VerticalAlignment = VerticalAlignment.Top; …移动将完美工作,但调整大小将在无法检测到的方向上疯狂。如果我将路线切换到以下位置: chart.HorizontalA

我正在开发一个仪表板应用程序,我希望用户能够调整其图表小部件的大小,并将其移动到他们喜欢的地方。我在能够同时移动和调整大小方面遇到了问题。原因是当图表对齐设置为以下值时:

chart.HorizontalAlignment = HorizontalAlignment.Left;
chart.VerticalAlignment = VerticalAlignment.Top;
…移动将完美工作,但调整大小将在无法检测到的方向上疯狂。如果我将路线切换到以下位置:

chart.HorizontalAlignment = HorizontalAlignment.Stretch;
chart.VerticalAlignment = VerticalAlignment.Stretch;
…移动将关闭,但调整大小将正常工作

移动代码如下:

public void chart_MouseMove(object sender, MouseEventArgs e)
{
    C1Chart chart = sender as C1Chart;

       if (!ModifierKey)
       {
           if (isMouseCaptured)
           {
               // Calculate the current position of the object.
               double deltaV = e.GetPosition(null).Y - mouseVerticalPosition;
               double deltaH = e.GetPosition(null).X - mouseHorizontalPosition;
               double newTop = deltaV + (double)chart.Margin.Top;
               double newLeft = deltaH + (double)chart.Margin.Left;

               // Set new position of object.            
               chart.Margin = new Thickness(newLeft, newTop, 0, 0); 

               // Update position global variables.
               mouseVerticalPosition = e.GetPosition(null).Y;
               mouseHorizontalPosition = e.GetPosition(null).X;
          }
      }
}
mouseVerticalPosition、mouseHorizontalPosition和isMouseCaptured在图表鼠标按下事件中分配,ModifierKey是布尔值,用于判断是否按下了任何键盘修改器以知道是否要移动。此代码已从MSDN中删除,但我对其他解决方案持开放态度


可以在此处或此处找到调整大小代码。这里是我的问题:是否有不同的方法来执行拖放和移动或调整大小(装饰器类),我没有看到。或者,有没有一种方法可以将此代码与对齐黑客一起使用。

您研究过MouseDragElementBehavior吗?

我还没有。在我找到更干净的解决方案之前,这是一个很好的解决方案。谢谢你的建议!今天实现的(我想我会发布以防其他人需要)能够做到:MouseDragElementBehavior=newmousedragelementbehavior();mouseBehavior.ConstrainToParentBounds=true;鼠标行为附件(图表);然后开始工作。再次感谢