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;鼠标行为附件(图表);然后开始工作。再次感谢