图为这些小差距。间隙之间的大蓝容器是宽度被确定的内容持有者。红色边框是可调整大小的持有人。
所以两个外面的缝隙描述了左边和右边的填充的红色支架。每个容器旁边的两个间隙是每个容器的左边和右边边距。
每当我调整持有者的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