Also ich würde gerne eine ObservableCollection als Binärbaum darstellen.
Dabei ist das oberste Element das erste Objekt in der Collection, das zweite das linke Kind von ObservableCollection[0], das dritte das rechte Kind usw.
Da diese Anordnung ja nicht sonderlich kompliziert ist kann es doch eigentlich nicht so schwer sein, oder?
Bis jetzt habe ich nur die Kreise, die die Elemente anzeigen erstellt und zum testen in ein StackPanel gepackt. Das ganze sieht dann so aus:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| <ItemsControl x:Name="BinaryTree" Grid.Column="1" HorizontalAlignment="Center"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Grid Height="40" Width="40"> <Ellipse Fill="Silver"/> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding}"/> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> |
Das Endergenis stelle ich mir in etwa so vor wie bei dieser Darstellung (die verbindenden Linien müssen erstmal nicht sein, da ich denke dass es um einiges leichter ist wenn ich die weg lasse
):
upload.wikimedia.org...de/2/2a/Heapsort.png
Kann ich die ganze Anordnung irgendwie in dem Template des ItemsControl festlegen oder was ist da am einfachsten/elegantesten?