У меня есть приложение WPF, которое привязывается к краям экрана (я просто устанавливаю .Top или .Left окна, если вы находитесь в пределах 20 пикселей от края экрана), но недавно я добавил некоторый код , предоставленный WPF SDK Team"связывается" с окном Chrome, и, хотя он отлично работает ( снимок экрана ), он заставляет "snapto" неожиданно перемещать окно (например, он переходит влево когда это должно быть прямо вниз)
Я сузил это до их обработки WM_NCCALCSIZE ... что действительно странно, потому что они в основном ничего не делают, они просто говорят, что обрабатывают это и возвращают 0.
В соответствии с документацией WM_NCCALCSIZE, это должно привести к тому, что все окно будет рассматриваться как клиентское (не имеющее сторонних интерфейсов), но это также означает, что всякий раз, когда мой код привязки перемещает окно вниз, вниз экрана он также перемещается влево примерно на 134 пикселя ... (перемещение к другим краям имеет аналогичные побочные эффекты), и пока я удерживаю мышь, чтобы перетаскивать ее, она мигает назад и вперед от того места, где она должна быть. Если я прокомментирую обработку WM_NCCALCSIZE, оснастка работает так, как должна (но форма выглядит неправильно).
Я перепробовал все, что мог, в обработчике WM_NCCALCSIZE, но не могу удержать его от перехода влево ... и, конечно, WM_NCCALCSIZE вызывается только при изменении размера окна, поэтому я не понимаю как это вызывает это в первую очередь!
P.S. Если вы действительно хотите увидеть код, он уже на CodePlex , в двух файлах найдите _HandleNCCalcSize и OnWindowLocationChanged