Ограничение окон wpf - PullRequest
       5

Ограничение окон wpf

0 голосов
/ 10 февраля 2011

У меня есть окно, которое должно быть ограничено в другом окне. Чтобы сделать это, Я подключаюсь к событию SizeChanged в окне верхнего уровня .... и в этом случае мне нужно настроить второе окно так, чтобы оно было выровнено по ближайшему краю, только если есть пересечение между ними, то есть если меньшее окно получает вне границы большего окна. Я делаю много математических расчетов, чтобы получить это ... и я все еще не близок к решению!

У меня проблемы с этим, потому что в нем много грязного кода. Мне было интересно, есть ли у кого-нибудь из вас более простое решение?

По сути, я имею дело с 2 прямоугольниками, и мне нужно убедиться, что при изменении размера большего прямоугольника ... если есть пересечение между ними, то меньший прямоугольник должен выровняться с краем большего прямоугольника, так что меньший прямоугольник находится внутри большего прямоугольника.

Может ли быть простая математическая задача в формах C #?

Любые предложения приветствуются, спасибо!

1 Ответ

0 голосов
/ 11 февраля 2011

Для обоих окон вам нужно получить координаты x и y местоположения окна в системе координат.

Как это сделать в wpf можно найти здесь http://blogs.msdn.com/b/llobo/archive/2006/05/02/code-for-getting-screen-relative-position-in-wpf.aspx

Затем вам нужно, чтобы два окна реагировали на события других размеров, чтобы одно окно получало уведомление об изменении размера других.

Тогда следующая математика сделает эту работу: (при условии, что окно 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;
}        
...