我正在开发一个仪表板应用程序,我希望用户能够调整其图表小部件的大小并将其移动到他们喜欢的位置。我无法同时移动和调整大小。原因是当图表对齐设置为以下时:
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 中删除,但我对替代解决方案持开放态度。
可以在此处(Microsoft 示例)或此处(Denis Vuyka 博客)找到调整大小的代码。这是我的问题:是否有不同的方法来进行我没有看到的拖动和移动或调整大小(装饰类)。或者,有没有办法将此代码与对齐黑客一起使用。