WPF - 动态重新排列控件层次结构

3
如何动态地填充容器?比如说用小圆圈递归地填充大圆圈,只要填满空间即可。
我想将其用于数据层次结构显示。
为了让它更清晰:
请参考以下图片:

有趣的问题。显然,你需要使用Canvas自己实现一些东西。我已经将这个问题加为书签,希望能看到你的成果。 - Andrew Garrison
@Mykola Bogdiuk:UniformGrid太“笨”了,我想画出智能美观的控件。 - boj
我相信在WPF中(无需外部库)没有控件可以将其子项适配到椭圆形或任何自定义形状内(当然不能裁剪)。您可以自己创建 - 从FrameworkElement派生,重写OnRender()MeasureOverride()ArrangeOverride()方法。 - Mykola Bohdiuk
@Mykola Bogdiuk:谢谢。我会尝试将其与Graph#结合使用。 - boj
1个回答

1

如果您想要现成的东西,请看一下Graph#

http://graphsharp.codeplex.com/

视频在这里:

它可以进行动态图布局,而且非常容易使用。你可以选择不同的布局算法[参见样例应用程序],每个算法都是可配置的。

然而,直到填充到“满”为止并不是一件轻松的事。尽管你可以创建一个图形,对其进行布局,然后测量顶点的大小与整个图形的大小之间的比例,然后添加或删除顶点,直到达到所需的密度。我敢说,你可以通过试错很快地得出一个快速而简单的公式,来计算需要添加的顶点数量与要填充的画布大小之间的关系。

请注意,您可以轻松地自定义顶点模板以成为任何类型的数据[这是标准wpf,但Graph#特定示例可以在http://graphsharp.codeplex.com/discussions中找到]。
如果您想编写自己的布局,您可能会喜欢查看Graph#使用的一些技术...例如动态缩放组件,其源代码可在此处获得:http://wpfextensions.codeplex.com/
希望这能有所帮助。

谢谢,这是一个很好的起点。我会在一些测试后再更新我的问题。 - boj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接