【发布时间】:2012-03-27 14:47:36
【问题描述】:
图片显示了这些小差距。间隙之间的蓝色大容器是确定宽度的内容容器。红色边框是可调整大小的 holder。
所以两个外部间隙描述了红色holder的左右padding。每个容器旁边的两个间隙是每个容器的左右margins。
每次我调整 holder 的大小时,都会引发 SizeChanged 事件。
gapsize = (holderWidth - summedUpWidthsOfAllContainers) / numberOfGaps
我通过 ActualWidth (UIElement) 属性获得 holderWidth。每次引发SizeChanged 事件时,我都会重新绑定(Silverlight hack)每个 container 的 MarginProperty 和 holder 的 PaddingProperty(UpdateTarget 在 Silverlight 中不起作用和INotifyPropertyChanged 不可用)。这是在UpdateMargins() 方法中完成的,该方法在SizeChanged 事件处理程序中被调用。
我试图通过比较以前的边距和新的边距来防止不可见的边距刷新(小于一个像素)。
但使用这种方法时,我会不时导致布局循环。现在我只想问有没有逻辑错误。我已阅读 this 博客并尝试以这种方式解决它。但是这些布局循环仍然会出现。
我这样做是为了在每次调整容器大小时都将内容容器(容器)居中。我知道具有两列的 Grid 也是一个可行的解决方案。但问题是红色 holder 必须是 WrapPanel,在这种情况下,如果 holder 第二个蓝色 容器 会跳到第一个下方> 太小而无法将它们放在一起显示。
【问题讨论】:
-
对不起,如果我误解了某些内容,但您为什么不直接使用环绕面板控件作为您的“红色支架”?
-
@Dave S:我实际上为此使用了一个环绕面板。但是,它使列相互粘连。这意味着每次调整支架的大小以防止这种粘连时,我都需要计算这些间隙。
-
我需要添加一件事。红色支架的宽度由应用程序的窗口大小决定。正如我们所知,包裹面板元素只使用它们需要的尽可能多的空间。我拉伸了这个包裹面板,但我无法将水平对齐的元素居中。这是通过这些差距完成的。
-
从你的问题中我不清楚你到底想做什么。
-
我的总结是:我需要一个环绕面板,其宽度由应用程序的窗口宽度决定。它的元素是水平定向的。但是,它的元素不应该相互粘连。如果它有两个容器(蓝色),则换行面板应该有两个“GridColumns”。并且蓝色容器必须居中。
标签: c# .net silverlight xaml layout