Я занимаюсь разработкой приложения Dashboard, в котором я хотел бы, чтобы пользователь мог изменять размеры и перемещать свои виджеты диаграмм туда, где им удобно.У меня были проблемы с возможностью двигаться и изменять размер одновременно.Причина в том, что когда выравнивания диаграммы установлены на следующее:
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, mouseHorizontPosition, isMouseCaptured назначаются в событии мыши на диаграмме, а ModifierKey является логическим значением, чтобы указать, нажата ли какая-либо из модификаторов клавиатуры, чтобы узнать, перемещаться или нет.Этот код был взят из MSDN, но я открыт для альтернативных решений.
Код изменения размера можно найти здесь (пример Microsoft) или здесь (блог Дениса Вуйки) .Вот мой вопрос: Существуют ли другие способы перетаскивания и перемещения или изменения размера (класс Adorner), которых я не вижу.Или есть способ использовать этот код с хаком выравнивания.