Ну, есть несколько областей, к которым нужно обратиться. Сначала получите уведомления о том, что край приближается к экрану:
- Получать уведомления об изменении размера окна. Это просто - просто используйте
Window.SizeChanged
событие.
- Получать уведомления об изменении положения окна. Это немного сложно, и я не уверен, как этого добиться, возможно, потребуется P / Invoke в Win32 API.
Далее, есть список TODO, которые нужно сработать, если край окна близок к краю экрана.
Есть ли несколько мониторов или если окно находится только на мониторе. Этот ответ поможет вам получить информацию о мониторе.
Обработайте действие щелчка края. Для этого понадобится немного прямой арифметической акробатики. Затем вы можете установить Window.Top
, Window.Left
, Window.Height
или Window.Width
.
Вам понадобится условный код для каждого ребра, но он будет выглядеть примерно так:
void SnapWindow(Window window, Size monitorSize) {
if (window.Left < c_SnapThreshold && window.Left > 0)
window.Left = 0;
if (window.Left + window.Width > (monitorSize.Width - SnapThreshold) && window.Left + window.Width < monitorSize.Width)
window.Width = monitorSize.Width - window.Left; //docks the right edge
//..etc
}
}