2010-05-17 148 views
3

我决定通过在Visual Studio 2010中编写一个音乐播放器来教自己C#。我和WPF一起去了,因为从我听到的声音来看,它听起来像是一个很好的皮肤基础。锚窗到WPF中的屏幕边缘

我想编程我的窗口的行为,如果窗口到达屏幕边缘(在10px左右),它会捕捉到屏幕边缘。什么是最好的方式去做这件事?

回答

3

那么你需要解决一些问题。首先得到边缘接近屏幕的通知:

  1. 获取窗口大小发生变化的通知。这一个很容易 - 只需使用Window.SizeChanged事件。
  2. 获取窗口位置正在改变的通知。这一个是有点棘手,我不知道如何实现它,可能需要P/Invoke到Win32 API。

然后,如果窗口边缘靠近屏幕边缘,就会出现一个TODO列表。

  1. 是否有多个监视器,以及窗口是否完全包含在监视器中。 This answer将帮助您获取显示器信息。

  2. 处理捕捉边缘的动作。这个需要一点算术杂技。然后,您可以设置Window.Top,Window.Left,Window.HeightWindow.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 
} 

}