我试图在WPF中创建一个 View ,并且很难弄清楚如何设置它。这是我要构建的内容:
所以对我来说似乎很复杂。似乎时间线上的每个项目都必须呈现其自己的线段。没关系。但是,项目顶部与线条(和项目底部与线条)之间的距离可能会有所不同。如果一个项目的行距顶部向下50 px,下一个项目的行距顶部向下100 px,则第一个项目需要50 px的填充,以便将线段相加。
我想我可以解决这个问题,但是,如果这两个项目在WrapPanel中的同一行上,我们只需要添加填充即可!假设有5个项目,而屏幕上只有3个房间……WrapPanel会将其他两个放在下一行。没关系,但这意味着只有前三个需要垫在一起,而后两个则需要垫在一起。
这让我头疼。我可以看看另一种方法吗?
编辑:我倾向于使用从Canvas继承并覆盖MeasureOverride和ArrangeOverride方法的自定义面板替换WrapPanel。
最佳答案
对此的理想解决方案可能是使用装饰器。在AdornerLayer上,您将为面板上的每个项目都有一个自定义的Adorner(您可以在DataTemplate中定义它)。您将能够检索每个项目的位置尺寸(Adorner的边界框)。同样在AdornerLayer上,然后您将在这些边界框之间绘制线条。
使用此解决方案,您可以按所需方式(使用所需的任何面板)对项目进行布局,并且项目仍将通过线连接。
很久以前,我将这种方法用于图形可视化工具。可以以任何方式布置任意UIElement的节点。用线连接的项目。
为了使所有项目完美对齐,可以在项目模板中使用“ Canvas ”作为根面板。 Canvas 可以是0x0单位大。然后,您将围绕该Canvas布置元素。 Canvas 成为您的引用点。该行顶部的所有内容都将为负Canvas.Top值。
另一种方法是使用负边界,该边界与行周围的顶部和底部控件的高度绑定(bind)。使用IValueConverter(Height * -1)反转高度。
关于wpf - 如何在水平WrapPanel中对齐WPF项,以便它们基于每个项中的任意垂直点对齐?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2888614/