锚点窗口到WPF中的屏幕边缘

时间:2010-05-17 04:50:32

标签: c# wpf visual-studio-2010

我决定通过在Visual Studio 2010中编写音乐播放器来自学C#。我选择了WPF,因为从我听到的内容来看,它听起来像是一个很好的基础。

我想用我的窗口编程,如果窗口到达屏幕边缘(在10px左右),它将捕捉到屏幕边缘。什么是最好的方法呢?

1 个答案:

答案 0 :(得分:3)

您需要解决一些问题。首先收到边缘接近屏幕的通知:

  1. 获取窗口大小正在变化的通知。这个很简单 - 只需使用Window.SizeChanged事件。
  2. 获取窗口位置正在变化的通知。这个有点棘手,我不知道如何实现它,可能需要P / Invoke到Win32 API。
  3. 然后,如果窗口边缘靠近屏幕边缘,则有一个TODO列表可以解决。

    1. 是否有多个监视器以及窗口是否仅包含在监视器上。 This answer将帮助您获取监视器信息。

    2. 处理捕捉边缘的动作。这个需要一些矩形算术杂技。然后,您可以设置Window.TopWindow.LeftWindow.HeightWindow.Width

    3. 每个边缘都需要条件代码,但它看起来像这样:

      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
      }
      

      }