gpt4 book ai didi

c# - 如何防止这种布局循环?

转载 作者:太空宇宙 更新时间:2023-11-03 22:01:36 28 4
gpt4 key购买 nike

enter image description here

图片显示了这些小间隙。间隙之间的蓝色大容器是宽度已确定的内容容器。红色边框是可调整大小的 holder

因此,两个外部间隙描述了红色 holder 的左右 padding。每个容器旁边的两个间隙是每个容器的左右边距

每次我调整 holder 的大小时,都会引发它的 SizeChanged 事件。

gapsize = (holderWidth - summedUpWidthsOfAllContainers)/numberOfGaps

我通过 ActualWidth (UIElement) 属性获取 holderWidth。每次引发 SizeChanged 事件时,我都会重新绑定(bind)(Silverlight hack)每个 container 的 MarginProperty 和 holder 的 PaddingProperty(UpdateTarget 在 Silverlight 中不起作用并且 INotifyPropertyChanged 不可用)。这是在 UpdateMargins() 方法中完成的,该方法在 SizeChanged 事件处理程序中调用。

我试图通过比较之前的边距和新的边距来防止不可见的边距刷新(小于一个像素)。

但使用这种方法时,我会不时导致布局循环。现在只想问问有没有逻辑错误。我读过 this博客并尝试以这种方式解决它。但是这些布局循环仍然出现。

我这样做是为了在每次调整容器大小时将内容容器(容器)居中。我知 Prop 有两列的网格也是一个可行的解决方案。但问题是红色 holder 必须是 WrapPanel,在这种情况下,第二个蓝色 container 跳到第一个下面,如果 holder 变得太小,无法将它们并排显示。

最佳答案

在我看来,在 SizeChanged 事件中更改可视化树上的任何内容最终都会给您带来性能问题,因为如果您不小心就会调用多个布局周期(这似乎与您描述的问题一致)。

如果您需要以特定方式布局内容,我建议您创建一个新面板并覆盖在布局周期中使用的 ArrangeOverride 和 MeasureOverride 方法。您可以使用现有的 WrapPanel 源代码(可从 Ms-Pl 下的 CodePlex 下载)并根据需要更改逻辑以布局内容。

网上有很多关于创建自定义面板和 Silverlight 布局周期的文章。

抱歉,我不能直接帮助您解决问题,但希望这些信息对您有所帮助

关于c# - 如何防止这种布局循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891889/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com