2011-02-09 11 views
0

私は別のウィンドウ内で拘束する必要があるウィンドウがあります。これを行うには、 トップレベルウィンドウのSizeChangedイベントにフックします。そのイベントでは、2番目のウィンドウを調整して、最も近いエッジに揃えるようにする必要があります。 2つの場合、すなわち、より小さいウィンドウがより大きなウィンドウの境界の外に出た場合。 私はこれを得るために多くの数学計算を行います...そして、私はまだ解決策の近くにいません!拘束ウィンドウwpf

私はあなたにこれに簡単な解決策があったかどうか疑問に思っていました。

基本的には2つの矩形を扱っていますが、大きな矩形のサイズが変わったときに、その2つの交差点がある場合は、小さな矩形が大きな矩形の端に揃うようにする必要があります小さな矩形がより大きな矩形内に入るようにする。

C#フォームの簡単な数学の問題になりますか?

ご挨拶ありがとうございます!

答えて

0

両方のウィンドウでは、ウィンドウの位置のx座標とy座標をsystemcoordinatesで取得する必要があります。 WPFでこれを行うにはどのように

がここhttp://blogs.msdn.com/b/llobo/archive/2006/05/02/code-for-getting-screen-relative-position-in-wpf.aspx

次見つけることができます2つのウィンドウがお互いに反応している必要があり、他のサイズが変更されたときに一つのウィンドウが通知されているように、イベントを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; 
}   
関連する問題