Окно привязки к краям экрана в WPF - PullRequest
3 голосов
/ 17 мая 2010

Я решил обучить себя C #, написав музыкальный проигрыватель в Visual Studio 2010. Я пошел с WPF, потому что, как я слышал, это звучит как хорошая основа для скина.

Я хочу запрограммировать свое окно так, чтобы, если окно доходило до края экрана (в пределах 10 пикселей или около того), оно привязывалось к краю экрана. Какой лучший способ сделать это?

1 Ответ

3 голосов
/ 17 мая 2010

Ну, есть несколько областей, к которым нужно обратиться. Сначала получите уведомления о том, что край приближается к экрану:

  1. Получать уведомления об изменении размера окна. Это просто - просто используйте Window.SizeChanged событие.
  2. Получать уведомления об изменении положения окна. Это немного сложно, и я не уверен, как этого добиться, возможно, потребуется P / Invoke в Win32 API.

Далее, есть список TODO, которые нужно сработать, если край окна близок к краю экрана.

  1. Есть ли несколько мониторов или если окно находится только на мониторе. Этот ответ поможет вам получить информацию о мониторе.

  2. Обработайте действие щелчка края. Для этого понадобится немного прямой арифметической акробатики. Затем вы можете установить 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
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...