WPF - Dynamically rearrange control hierarchy
-
12-10-2019 - |
Question
How is it possible to dynamically fill a container? Let's say to fill a big circle with small circles, recursively. Just fill the space fine.
I would like to use it for data hierarchy display.
To make it clear:
Solution
If you want something off the shelf, have a look at Graph#
http://graphsharp.codeplex.com/
videos here:
- Simple usage scenario http://www.youtube.com/watch?v=VTbuvkaPGxE
- Data Visualization with Graph# http://www.youtube.com/watch?v=agDPDzqB4o0&feature=related
It does dynamic graph layout and is fairly easy to use. There are a choice of layout algorithms [see sample app] each of which are configurable.
however filling until an area is "full" is not something that'll work out of the box. Although you could for example create a graph, lay it out & then measure the ratio between the size of a vertex and the size of the whole graph, then add or remove vertexes until you hit upon your desired density. I would hazard you could pretty quickly by trial and error come up with a quick and dirty forumula between the size of canvas to fill & the number of vertexes you should add.
Note that you can customise the vertex templates pretty easily to be any kind of data [this is standard wpf but Graph# specific examples can be found on http://graphsharp.codeplex.com/discussions ]
if you wanted to code your own layout you might like to have a look at some of the techniques Graph# use... for example a dynamic zoom component the source for which is available here: http://wpfextensions.codeplex.com/
hope that helps a little