FrEEzE2046 - Di 25.05.10 13:55
Titel: Grid Lines dynamisch erstellen
Hallo,
ich möchte dynamisch Grid Rows und Columns erzeugen. Alle Zellen sind gleich groß und damit jede Row- bzw. Columndefinition gleich, also habe ich folgenden Code produziert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| double sqrt = Math.Sqrt(MAX_CELL_COUNT); int rowCount = Convert.ToInt32(sqrt - 1.0), colCount = Convert.ToInt32(sqrt); GridLength gl = new GridLength(1.0, GridUnitType.Star); RowDefinition rd = new RowDefinition() { Height = gl }; ColumnDefinition cd = new ColumnDefinition() { Width = gl }; for (; rowCount > 0; --rowCount) { this.MyGrid.RowDefinitions.Add(rd); } for (; colCount > 0; --colCount) { this.MyGrid.ColumnDefinitions.Add(cd); } |
Das ganze führt jedoch zur Exception, dass er plötzlich die Page nicht mehr finden würde (das ganze Läuft in einer NavigationApplication).
Die Exception tritt genau dann auf, wenn die for-Schleife zum zweiten Mal "rd" adden möchte. Daher gehe ich davon aus, dass C# es nicht erlaubt, dass ich ihm mehrfach die selbe Instanz als "neue" RowDefinition verkaufe.
Als C/C++ Programmierer ist es mir jedoch zu wider - vollkommen unnötiger Weise - mehrfach eine Klasse mit den gleichen Attributen zu instanzieren.
Daher meine Frage: Geht dass nicht auch einfacher?
Kha - Di 25.05.10 16:30
Die innerste Exception sollte eher "'value' already belongs to another 'RowDefinitionCollection'." lauten. Da DependencyObjects einen Parent haben, können sie nur einmal eingehängt werden. Selbst wenn es sich um den gleichen Parent handelt, dürften sich sonst einige Komplikationen ergeben.
FrEEzE2046 hat folgendes geschrieben : |
| Als C/C++ Programmierer ist es mir jedoch zu wider - vollkommen unnötiger Weise - mehrfach eine Klasse mit den gleichen Attributen zu instanzieren. |
Wirst du's überleben ;) ? In F# bin ich es gewohnt, in quasi jeder Zeile implizit ein Tupel-Objekt zu erzeugen, und in 99% der Fälle kann es mir völlig wurst sein. Das bedeutet es, in einer High-Level-Sprache mit GC zu arbeiten.