2011-02-09 63 views
0

我有一個窗口需要在另一個窗口內進行約束。爲了做到這一點, 我鉤入頂級窗口中的SizeChanged事件....在這種情況下,我需要調整第二個窗口,以便它對齊到最近的邊緣,只要在也就是說,如果較小的窗口超出較大窗口的邊界。 我做了很多數學計算來得到這個......我仍然沒有接近解決方案!約束窗口wpf

我在做這件事情時遇到了麻煩,因爲它涉及很多雜亂的代碼我想知道你們中的任何一個人是否有更簡單的解決方案?

基本上我處理2個矩形,我需要確保當更大的矩形的大小發生變化時...如果兩者之間存在交集,那麼較小的矩形應該將它自己對齊到較大的矩形的邊緣使較小的矩形位於較大的矩形內。

可能是C#表單中的一個簡單的數學問題?

歡迎任何建議,謝謝!

回答

0

對於這兩個窗口,您需要獲取系統座標系中窗口位置的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; 
}