2011-04-26 97 views
0

我正在開發一個WPF應用程序。在這個應用程序中,我有一個包含WrapPanel的窗口。 WrapPanel內部是一系列不同高度的StackPanels,但寬度完全相同。設計時不知道StackPanels的數量和大小(它們是動態生成的)。如何根據內容動態調整WrapPanel高度?

這些StackPanels通常彼此堆疊良好,然後在WrapPanel中沒有更多空間時「換行」到另一列。爲了達到這個目的,我必須爲我的WrapPanel設置一個固定的高度(高度設置爲「Auto」,它將繼續向下而不是包裝到另一個列)。然而,偶然我有一個StackPanel太大而不適合WrapPanel高度,它只是被截斷。這種情況的圖像如下。 (我沒有代表嵌入圖像)。

http://oi54.tinypic.com/2qa1ul3.jpg

我的問題是,我可以查詢每個StackPanel的高度之前,我顯示()給用戶,並設置基於最大的StackPanel的WrapPanel的高度?有一個更好的方法嗎?謝謝。

回答

1

首先,您是否確保此問題不是由WrapPanel達到其最大可用尺寸(即,如果其尺寸受其父窗口或元素的約束)引起的?因爲如果是這種情況,那麼您需要查看重構整體佈局或將其包裝在ScrollViewer中。

如果上述情況並非如此,並且WrapPanel有足夠的空間「增長」,這確實看起來像是一個奇怪的問題。你說StackPanels是動態生成的。因此,在您的代碼中,您必須致電myWrapPanel.Children.Add(stackPanel)。這行代碼後,你可以嘗試添加類似以下內容:

myWrapPanel.Height = myWrapPanel.Children.Cast<FrameworkElement>().Max(e => e.ActualHeight); 

編輯:剛剛意識到這一點,如果一個StackPanel中佔據了整個高度,作爲你的圖像中才起作用。但也許它會讓你走上正軌!

+0

我其實不希望WrapPanel垂直增長,否則StackPanels不會跳轉到下一列。所以,WrapPanel的高度是固定的。你的代碼很有趣,謝謝你的回覆。我會嘗試一下。 – robr 2011-04-26 19:21:46

+0

該代碼有效,做我需要的。有點棘手,因爲Height屬性在Windows上沒有設置,直到Show()被調用...但我得到它的工作。謝謝。 – robr 2011-04-26 20:58:43

相關問題