У меня есть пользовательский элемент управления, и я хочу, чтобы пользователь мог перетаскивать его.Поэтому я вставил следующий код в пользовательский элемент управления:
void MoveableStackPanel_MouseMove(object sender, MouseEventArgs e)
{
if (IsMoving)
{
Point newLoc = e.GetPosition(null);
MainWindow.Instance.Title = newLoc.ToString(); // Debug
Margin = new Thickness(newLoc.X - 48, newLoc.Y - 48, 0, 0);
}
}
Обратите внимание на «-48» в коде.Когда мышь перемещают вверх или влево, мышь больше не находится в области управления и, таким образом, больше не вызывает событие MouseMove.Поэтому я дважды добавил -48, чтобы обойти это.Но когда пользователь перемещает мышь быстрее, чем каркас может обновить, мышь выйдет за пределы области управления, и элемент управления также больше не будет двигаться.
Я думал о назначении IMovableInterface и сохранении списков элементов управлениякоторые движутся в основной форме и тому подобное, но это все такие хлопоты и такие ... Какое правильное решение?
PS: элементы управления генерируются динамически, поэтому мне нужно решение в коде C #, а нев XML.