约束窗口wpf

问题描述:

我有一个窗口需要在另一个窗口内进行约束。为了做到这一点, 我钩入*窗口中的SizeChanged事件....在这种情况下,我需要调整第二个窗口,以便它对齐到最近的边缘,只要在也就是说,如果较小的窗口超出较大窗口的边界。 我做了很多数学计算来得到这个......我仍然没有接近解决方案!约束窗口wpf

我在做这件事情时遇到了麻烦,因为它涉及很多杂乱的代码我想知道你们中的任何一个人是否有更简单的解决方案?

基本上我处理2个矩形,我需要确保当更大的矩形的大小发生变化时...如果两者之间存在交集,那么较小的矩形应该将它自己对齐到较大的矩形的边缘使较小的矩形位于较大的矩形内。

可能是C#表单中的一个简单的数学问题?

欢迎任何建议,谢谢!

对于这两个窗口,您需要获取系统坐标系中窗口位置的x坐标和y坐标。

如何在WPF这样做可以在这里http://blogs.msdn.com/b/llobo/archive/2006/05/02/code-for-getting-screen-relative-position-in-wpf.aspx

下一页找到你需要有两个窗口上每个人的反应,SizeChanged将事件,以便当别人大小已更改的一个窗口得到通知。

那么下面数学会做的工作: (假设窗口1目前在窗口2和窗口2的大小变化的范围和要真正地调整,而不是移动它时,可以在窗口)

//PSEUDOCODE 
//Case1 (left bound changes) 
if(window2.x > window1.x) 
{ 
    window1.x = window2.x; 
} 
//Case2 (top bound changes) 
if(window2.y > window1.y) 
{ 
    window1.y = window2.y; 
} 
//Case3 (right bound changes) 
if(window2.x + window2.width < window1.x + window1.width) 
{ 
    window1.width = window2.x + window2.width - window1.x; 
} 
//Case4 (bottom bound changes) 
if(window2.y + window2.height < window1.y + window1.height) 
{ 
    window1.height = window2.y + window2.height - window1.y; 
}