Обеспечение того, что окно WPF находится внутри границ экрана - PullRequest
5 голосов
/ 14 апреля 2010

Я восстанавливаю координаты окна при запуске приложения. В старых добрых Windows-формах я использовал коллекцию System.Windows.Forms.Screen. Есть ли что-нибудь подобное в мире WPF?

Я заметил PrimaryScreen*, VirtualScreen* параметры в System.Windows.SystemParameters. Однако они оставили меня висеть, так как кажется, что невозможно определить, находится ли Window внутри границ, в тех случаях, когда мониторы имеют разный размер.

1 Ответ

4 голосов
/ 14 апреля 2010

System.Windows.Forms.Screen прекрасно работает в WPF, поэтому я думаю, что разработчики WPF не увидели никакого преимущества в замене его на версию, специфичную для WPF.

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

public class ScreenBoundsConverter
{
  private Matrix _transform;

  public ScreenBoundsConverter(Visual visual)
  {
    _transform =
      PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
  }

  public Rect ConvertBounds(Rectangle bounds)
  {
    var result = new Rect(bounds.X, bounds.Y, bounds.Width, bounds.Height);
    result.Transform(_transform);
    return result;
  }
}

Пример использования:

var converter = new ScreenBoundsConverter { Visual = this };

foreach(var screen in System.Windows.Forms.Screen.AllScreens)
{
  Rect bounds = converter.ConvertBounds(screen.Bounds);
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...