圖爲這些小差距。間隙之間的大藍容器是寬度被確定的內容持有者。紅色邊框是可調整大小的持有人。
所以兩個外面的縫隙描述了左邊和右邊的填充的紅色支架。每個容器旁邊的兩個間隙是每個容器的左邊和右邊邊距。
每當我調整持有者的SizeChanged
事件會得到提升。
gapsize = (holderWidth - summedUpWidthsOfAllContainers)/numberOfGaps
我通過ActualWidth
(的UIElement)屬性來獲取holderWidth。我重新綁定(Silverlight的黑客)每個容器的MarginProperty和架每次我的SizeChanged
事件引發的PaddingProperty(UpdateTarget
沒有在Silverlight中工作,INotifyPropertyChanged
不可用)。這在方法中完成,該方法在SizeChanged
事件處理程序中調用。
我試圖通過比較以前的新邊距來防止邊緣(小於一個像素)不可見的刷新。
但是用這種方法,我會不時地造成佈局週期。現在我只想問是否有邏輯錯誤。我已閱讀this博客,並試圖通過這種方式解決它。但是這些佈局週期仍然出現。
我這樣做是爲了在每次持有者獲得調整大小時集中內容擁有者(容器)。我知道有兩列的電網也是一個可行的解決方案。但問題是,紅色持有人必須是一個WrapPanel,在這種情況下,第二個藍色容器跳過第一個,如果持有人太小,不能顯示他們相鄰。
很抱歉,如果我誤解的東西,但你爲什麼不只是使用包裝面板控制作爲你的'紅色持有人'? – 2012-03-27 14:59:01
@Dave S:我實際上使用包裝面板來達到這個目的。儘管如此,它使得這些柱子彼此粘在一起。這意味着我需要計算這些差距,每當持有者被調整大小以防止這種粘連。 – 2012-03-27 15:06:14
我需要添加一件東西。紅色持有者寬度由應用程序的窗口大小確定。正如我們所知,包裝面板元素只需使用盡可能多的空間,因爲它們需要**。我拉伸了這個包裹面板,但我無法居中水平對齊的元素。這是通過這些差距完成的。 – 2012-03-27 15:14:21