约束windows wpf

时间:2011-02-09 22:28:31

标签: c# wpf winforms math wpf-controls

我有一个需要在另一个窗口内约束的窗口。为此, 我在顶层窗口挂钩了SizeChanged事件....在那种情况下我需要调整第二个窗口,这样只有当两者之间有一个交叉时它才会与最近的边对齐,即如果较小的窗口得到在更大的窗口的边界之外。 我做了很多数学计算来得到这个...而且我仍然没有接近解决方案!

我很难做到这一点,因为它涉及很多混乱的代码我想知道你们中的任何一个人是否有更容易的解决方案?

基本上即时处理2个矩形,我需要确保当较大的矩形的大小发生变化时......如果两者之间存在交叉,那么较小的矩形应该与较大的矩形的边缘对齐,以便较小的矩形在较大的矩形内。

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

欢迎任何建议,谢谢!

1 个答案:

答案 0 :(得分:0)

对于两个窗口,您需要在systemcoordinates中获取窗口位置的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;
}