У меня есть приложение WFP, которое отображает серию окон без полей на рабочем столе.Они могут быть расположены в соответствии с требованиями пользователя, и я хотел бы, чтобы они привязывались к невидимой сетке, чтобы помочь с идеальным выравниванием.Я могу добиться этого с помощью кода в следующих строках, обрабатывая событие LocationChanged и заставляя мое окно перемещаться постепенно:
private void Window_LocationChanged(object sender, EventArgs e)
{
int xProximity = (int)this.Left % 50;
if (xProximity <= 10 || xProximity >= 40)
this.Left = ((int)Math.Round(this.Left / 50.0)) * 50;
int yProximity = (int)this.Top % 50;
if (yProximity <= 10 || yProximity >= 40)
this.Top = ((int)Math.Round(this.Top / 50.0)) * 50;
}
Этот подход, однако, является только реакционным, так как окно можно перерисоватьместоположение, которое действительно занимает мышь, а затем мгновенно возвращается назад.Чтобы получить эффект сглаживания, который мне нужен, я думаю, мне нужно переопределить DragMove, чтобы в первую очередь окно не было взято с помощью мыши.Проактивный, а не реактивный, если хотите - надеюсь, это имеет смысл - я видел, как несколько потоков сталкивались с одной и той же проблемой, но ничего с ответом!Спасибо всем:)