Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 约束windows wpf_C#_Wpf_Winforms_Math_Wpf Controls - Fatal编程技术网

C# 约束windows wpf

C# 约束windows wpf,c#,wpf,winforms,math,wpf-controls,C#,Wpf,Winforms,Math,Wpf Controls,我有一个窗口需要约束在另一个窗口中。为了做到这一点,, 我钩住顶层窗口上的SizeChanged事件……在这种情况下,我需要调整第二个窗口,以便只有当两个窗口相交时,即当较小的窗口超出较大窗口的边界时,它才与最近的边对齐。 我做了很多数学计算来得到这个…我仍然不接近解决方案 我很难做到这一点,因为它涉及到很多混乱的代码,我想知道你们是否有人有一个更简单的解决方案 基本上我处理的是两个矩形,我需要确保当较大矩形的大小改变时……如果两者之间存在交点,则较小的矩形应与较大矩形的边缘对齐,以便较小的矩形

我有一个窗口需要约束在另一个窗口中。为了做到这一点,, 我钩住顶层窗口上的SizeChanged事件……在这种情况下,我需要调整第二个窗口,以便只有当两个窗口相交时,即当较小的窗口超出较大窗口的边界时,它才与最近的边对齐。 我做了很多数学计算来得到这个…我仍然不接近解决方案

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

基本上我处理的是两个矩形,我需要确保当较大矩形的大小改变时……如果两者之间存在交点,则较小的矩形应与较大矩形的边缘对齐,以便较小的矩形位于较大矩形内

可能是一道C形式的简单数学题


欢迎任何建议,谢谢

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

如何在wpf中实现这一点可以在这里找到

接下来,您需要让这两个窗口对彼此的大小更改事件做出反应,以便在其他窗口的大小更改时通知其中一个窗口

然后,以下数学将完成这项工作: (假设窗口1当前在窗口2的范围内,且窗口2的大小发生变化,并且您希望实际调整窗口的大小,而不是在可能的情况下移动窗口)

//伪代码
//案例1(左边界更改)
如果(window2.x>window1.x)
{
window1.x=window2.x;
}
//案例2(上限变更)
如果(window2.y>window1.y)
{
window1.y=window2.y;
}
//案例3(右边界更改)
if(window2.x+window2.width
//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;
}