
Ergebnis 1 bis 5 von 5
-
Bin hier zuhause
- 09.10.2011, 16:25
- #1
Hallo Leute,
Ich hab ein kleines Problem
Und zwar möchte ich fürs WP7 etwas entwickeln, mitdem es möglich ist, GUIs zu bauen (keine echte GUI, eher so für Hauptmenü usw ne Art MenuEntry und so)
Und die Controls der "Gui" sollen halt teilweise auch Kindelemente haben dürfen.
Es macht aber zB keinen Sinn, dass ein Labelelement einen button als Kind hat und daher möchte ich sowas einschränken, indem ich quasi festlege, welche Kindelemente erlaubt sind.
Ich dachte dabei an eine Enumeration, die den Steuerelementen einen Typ gibt und man diese typen dann auch benutzen kann, um die erlaubten Kindelemente zu beschränken.
Dies hatte ich mir so vorgestellt:
AllowedChilds = Child.TextControl | Child.ButtonControl
oder so ähnlich zumindest.
nun meine Fragen:
Könnte ich das so durchlaufen? Wenn ja, wie?
Intern würde so eine Verknüpfung doch so aussehen: TextControl,ButtonControl
Zu bemerken ist, dass die Enum kein [Flags] Attribut besitzt.
Wenn ich ne Enum durchlaufen will, muss ich ja Enum.GetValues nutzen.
Das Problem ist, GetValues steht in Silverlight nicht zur Verfügung.
Ein möglicher Workaround wäre ja noch, dass ich ne List benutz, die als T meine Enum hat und man da eben alle erlaubten Kindtypen einträgt.
Würdet ihr mir das empfehlen?
Hoffe, mein Text ist verständlich, ist n bissl schwer zu erklären, wie ichs machen wollte.
-
Gehöre zum Inventar
- 09.10.2011, 16:31
- #2
Also die Variante ne List mit den erlaubten Typen zu machen wäre wahrscheinlich die einfachere (oder eben einfach ein Array - das wäre Speichersparsamer und zur Laufzeit ändert sich ja nichts daran (muss also nicht wachsen oder schrumpfen)).
Wobei man ja in der Liste dann auch direkt die Typen der Kind-Elemente speichern könnte (sich die Enum also ganz sparen). Mit entsprechenden Interfaces bleibt die Liste auch halbwegs kompakt.
-
Bin hier zuhause
- 09.10.2011, 17:02
- #3
Bei mir erben alle Controls von der Basisklasse Control (bzw sie sollen es, wenn sie angelegt werden), diese wiederum erbt von IControl.
Im Interface hätte ich dann zB die Methode AddChild oder so, welche dann in der Basisklasse eben übernommen wird und dann von nem kindelement überschrieben werden könnte.
Das System ist aber praktisch so ausgelegt, dass man halt auch eigene Controls machen kann, indem man einfach die Basisklasse ableitet, weswegen ich nicht einfach statisch meine Typen nutzen kann, die ich standardmäßig mitgebe.
Allerdings, als du das mit Interfaces sagtest usw kam mir die Idee, dass ich einfach ein externe Interface mache, wo diese Sachen drin sind, die es erlauben, dass ein Control andere Controls enthalten kann (zB IContainer)
Und durch dieses Interface würde sich die Lösung zumindest für meine Elemente einfacher gestalten, da ich das nur dort implementieren müsste, wo Kindelemente gebraucht werden (In Form einer Basisklasse, so dass das Interface nur an einem Ort eingebunden ist, erleichtert die Wartung usw)
Aber es wäre trotzdem mal gut zu wissen, was noch so hier an Vorschlägen käme, eine weitere Möglichkeit hab ich ja eben genannt, die man nutzen kann
-
Gehöre zum Inventar
- 09.10.2011, 17:21
- #4
Ja, meine Idee mit den Interfaces war ohnehin so in die Richtung:
IContainerControl (Panels, etc.)
IInteractiveControl (Buttons, Checkboxen, etc.)
IContentControl (TextBlöcke, Bilder)
Und in einen Button dürfen dann halt nur IContentControls eingefügt werden. Andererseits ließe sich das ganze natürlich auch über Attribute lösen.
-
Bin hier zuhause
- 09.10.2011, 17:28
- #5
Stevie, deine Lösung ist für mich eigentlich die beste.
Und eigentlich ist sie auch simpel gehalten, wieso bin ich da nicht selbst drauf gekommen
Jedenfalls, ich werd dann ein zentrales Interface für alle Controls machen und dann ein Interface für Panels usw
So kann ich dann auch die AddChild-Methode überladen und gleich nen passenden Typ einfordern usw.
Danke für die Hilfe ;D
Ähnliche Themen
-
Medienscanner manuell durchlaufen lassen?
Von Hazard im Forum Samsung Galaxy S2Antworten: 2Letzter Beitrag: 25.08.2011, 07:42
Pixel 10 Serie mit Problemen:...