我正在尝试在 WPF 中创建一个视图,并且很难弄清楚如何设置它。这是我正在尝试构建的内容:
- 我的 ViewModel 公开了一个名为 Items 的 IEnumerable 属性
- 每个项目都是时间轴上的一个事件,每个项目都实现了 ITimelineItem
- 每个项目的 ViewModel 都有自己的 DataTemplate 来显示它
- 我想显示由一条线连接的时间线上的所有项目。我认为 ListView 内的 WrapPanel 可以很好地解决这个问题。
- 但是,每个项目的高度将根据其显示的信息而有所不同。有些项目将在行上具有图形对象(如圆形或菱形,或其他),有些项目在行上方或下方有注释。
所以对我来说似乎很复杂。似乎时间线上的每个项目都必须渲染自己的线段。没关系。但是项目顶部到行(以及项目底部到行)之间的距离可能会有所不同。如果一个项目的线从顶部向下 50 px,而下一个项目的线从顶部向下 100 px,则第一个项目需要 50 px 的填充,以便线段相加。
我想我可以解决这个问题,但是,如果这两个项目在 WrapPanel 的同一行上,我们只需要添加填充!假设有 5 个项目,屏幕上只有 3 个空间... WrapPanel 将把另外两个放在下一行。没关系,但这意味着只有前 3 个需要一起填充,最后 2 个需要一起填充。
这就是让我头疼的地方。我可以看看另一种方法吗?
编辑:我倾向于用继承自 Canvas 并覆盖 MeasureOverride 和 ArrangeOverride 方法的自定义面板替换 WrapPanel。