在 HTML 中,对于表格(至少),可以设置元素的样式以便合并边距。 IE。相邻两行的上边距和下边距均为 10,因此这两行之间的间距为 20。当它们的边距合并时,间距仅为 10。
有什么方法可以在 WPF 中实现这一点吗?
最佳答案
没有简单的方法可以做到这一点,当您查看 WPF 如何处理布局时,您会明白原因,但也会发现如果您愿意的话,还有一个困难的方法。
正如您从 FrameworkElement
的 WPF source code 中看到的那样,MeasureCore
密封覆盖方法(防止我们进一步覆盖它)在返回所需元素之前添加元素的边距尺寸。令人恼火的是,他们似乎有一个 BypassLayoutPolicies
选项可以防止这种情况发生,但出于可能从短视到虐待狂的原因,他们将此设为 internal
,所以它不是一个选项。因此,元素的完全边距大小总是最终分配给 DesiredSize
,这基本上是所有布局面板 (StackPanel
) 等天真地用来排列项目的内容在 ArrangeOverride
期间。
但是这就是解决方案,如果您愿意将所有面板子类化并覆盖它们的 MeasureOverride
和 ArrangeOverride
。知道两个相邻子项的边距值后,您可以在测量和排列过程中将它们各自的右/左或下/上边距折叠在一起,方法是从它们的“DesiredSize”中减去边距的重复部分。
但是,如果您仍然要进行子类化,另一种选择(我认为整体上更清洁和更好的做法)是将 Spacing
属性添加到您的子类化面板中,该属性存在于 WinUI version of StackPanel
. This将要求您确保您的子项的边距均为零,或者从它们的 DesiredSize
中减去它们的实际边距值。然后,您可以在排列过程中在项目之间添加此间距。
StackPanel
很容易以这种方式进行扩展,因为这两个过程都非常简单。不幸的是,Grid
要复杂得多。 VirtualizingStackPanel
可能是不可能的...所以这绝不是 Elixir ,但考虑到 StackPanel
的普遍性,即使只是扩展该控件也可以覆盖整个很多地面并导致更清洁的布局 IMO。
关于wpf - 有没有办法在 WPF 中合并边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28849450/