【发布时间】:2019-04-05 15:58:02
【问题描述】:
我有一个ItemsControl 绑定到这样的数据:
<ItemsControl Name="MainPanel" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Definition}" TextWrapping="Wrap"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在我的数据模型中,每个项目都有一个y 坐标,用于将项目垂直放置在屏幕上,并且每个项目的高度都是可变的(因为TextWrapping)。
我需要将每个项目定位在y 坐标上,除非它与前一个项目重叠,在这种情况下它被放置在前一个项目的下方。
我想使用Margin 属性来做到这一点,但实际上并不是那么简单......
关于如何进行的任何想法?
【问题讨论】:
-
我认为您需要为此编写自己的包装面板。
-
我的 WPF 生锈了,但我想说:用画布 (
<ItemsPanelTemplate><Canvas /></ItemsPanelTemplate>) 替换 ItemsControl 面板,然后将您的项目绑定到Canvas.Top依赖属性 (<TextBlock Text="..." Canvas.Top="{Binding y}" ...) -
哦,我错过了“不要重叠”的要求。那我的解决方案就不行了
-
我会尝试使用自定义 StackPanel 和附加属性,例如
MyCustomStackPanel.MinY。
标签: c# wpf itemscontrol