均匀分布的散布视图不重叠的项目

时间:2010-03-23 16:54:26

标签: wpf pixelsense scatterview

我有一个应用程序根据表面对象放置在表面表上创建可变数量的ScatterviewItems。

根据在数据库中查找的信息,以编程方式将ScatterViewItem添加到ScatterView

Scatterview在显示此信息方面做得很好

但是,我希望他们是

  1. 在表格中均匀分布

  2. 没有任何项目重叠

  3. 任何想法如何做到这一点?

3 个答案:

答案 0 :(得分:0)

UniformGrid

您也可以通过Panel联系来创建自己的面板。 您将在Dr. WPF ItemsControl How-To系列中找到一些超级有价值的信息:http://drwpf.com/blog/itemscontrol-a-to-z/

这是一个必读的时期。

答案 1 :(得分:0)

听起来你需要碰撞检测。

这个问题有两部分:检测和解决。检测是否有任何项目的边界与任何其他项目的边界相交。如果物品是长方形或圆形的,这是非常简单的。如果你正在处理其他几何形状,它会变得复杂。

一旦发现碰撞,解决方法就是该怎么做。谷歌将帮助您找到无数的算法。以下是stackoverflow讨论的几个链接:WPF: Collision Detection with Rotated SquaresApplying Coefficient of Restitution in a collision resolution methodBest way to detect collision between sprites?

您可以实现碰撞工作,以便物品在散射时彼此绑定。根据项目数量的不同,这可能会造成很多碰撞,导致物品散落不好。如果发生这种情况,只需运行碰撞检测,一个项目已停止移动。

答案 2 :(得分:0)

ScatterViewItem具有属性Center和Orientation,您可以使用它们以编程方式定位项目。如果您知道每个项目的大小,您应该能够使用这些属性以适合您的情况的任何方式定位它们。通过挂钩每个的Loaded事件并检查ActualWidth / ActualHeight,您可以获得尺寸。如果您可以为所有SVI使用固定的初始大小,那就更容易了。

你可以通过计算一个简单的网格(加上一些随机性使它看起来更自然)来展开它们,或者你可能正在寻找所谓的“力导向布局”,它赋予每个物体相对于它的驱避力。尺寸。过了一会儿,元素会自然地彼此均匀分布,但如果它们用完房间,它们可能仍会重叠。我还没有看到WPF这样的例子,但请参阅flare.prefused.org/demo(layout> force)以了解我在Flash中的含义。