Laden...

Angezeigte Oberfläche/Steuerelemente nach Auswahl in ComboBox verändern

Erstellt von nullbytes vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.242 Views
N
nullbytes Themenstarter:in
18 Beiträge seit 2014
vor 8 Jahren
Angezeigte Oberfläche/Steuerelemente nach Auswahl in ComboBox verändern

Hallo Freunde,

ich habe ein Problem bei der Umsetzung einer Idee, bei der ich mir leider nicht zu helfen weiß.

Ich möchte mittels einer Oberfläche, bestehend aus Labels und TextBoxen, gewisse Daten verschiedener Gerätschaften in eine Datenbank schreiben. Jede Gerätschaft enthält spezifische Details und somit unterschiedliche Eingabemasken. Ich möchte nun, dass die Oberfläche je nach Auswahl in der ComboBox ihre Labels und TextBoxen anpasst, damit die spezifischen Daten eingegege werden könnnen, um sie später dann zu speichern.

Die Eingabemasken, bestehend aus Stackpanels, Grids, Labels, Textboxen und Buttons, sind individuelle Anfertigungen und befindet sich in einer Groupbox. Meine Idee war jetzt, einfach je nach Auswahl in der ComboBox die richtige Groupbox mit der entsprechenden Eingabemaske mittels Nenndaten.Visibility = System.Windows.Visibility.Visible; ein- bzw. auszublenden.

Problem ist allerdings, dass die separaten Masken nicht "verschwinden" im Sinne von "sie sind weg", sondern lediglich nicht angezeigt werden. Das heißt, dass der Platz auf der Oberfläche der Form weiterhin reserviert bleibt und lediglich leer ist.

Wie kann ich das ändern bzw. wie kann ich mein Problem beseitigen?

Die Form soll einfach nur die entsprechende Eingabemaske zur ausgewählten Auswahl anzeigen.

Meine Idee war jetzt in der Groupbox ein Grid zu definieren, indem ich die Spalten und Zeilen einfach mit bestimmten Labels und TextBoxen doppelt belege und je nach Auswahl in der Combobox einfach die richtigen Steuerelemente einblende und die anderen ausblende. Ist glaube machbar, jedoch recht unschön, oder? Hat jemand eine bessere Idee?

P
441 Beiträge seit 2014
vor 8 Jahren

Du setzt die Controls vermutlich auf Visibility.Invisible ? Damit der Platz nicht "verbraucht" wird müsstest du sie auf** Visibility.Collapsed** setzen.

Sinnvoller wäre vermutlich eine generische Struktur, die über Databinding und einem DataTemplateSelector dir pro Gerät(etyp) das passende Template für das selektierte Gerät zur Anzeige gibt.

1.040 Beiträge seit 2007
vor 8 Jahren

Als Nachtrag zu Papst seiner Antwort:
Visibility Enumeration
Mit Visibility.Invisible meint er Visibility.Hidden. 🙂

P
441 Beiträge seit 2014
vor 8 Jahren

Richtig, Hidden.

Sorry für den Fehler, war ein Schuss aus der Hüfte - normalerweise kennt der Xaml Designer die Enums 😉

N
nullbytes Themenstarter:in
18 Beiträge seit 2014
vor 8 Jahren

Hallo,

danke für diese Antwort!

Hat in der Tat beim zweiten Versuch super geklappt! Ich kannte die Collapsed-Einstellung u.a. aus der Doku, irgendwie habe ich sie nur nicht richtig umgesetzt bekommen, weshalb ich gezweifelt hatte ob diese wirklich die richtige Einstellung für mich ist. Nachdem du mir nochmal bestätigt hast, dass das so richtig ist, habe ich nach etwas basteln alles hinbekommen. Danke dafür!

Kannst du mir vielleicht kurz erklären was es mit der generischen Struktur auf sich hat und wieso das vermutlich die bessere Lösung wäre?

Du setzt die Controls vermutlich auf Visibility.Invisible ? Damit der Platz nicht "verbraucht" wird müsstest du sie auf** Visibility.Collapsed** setzen.

Sinnvoller wäre vermutlich eine generische Struktur, die über Databinding und einem DataTemplateSelector dir pro Gerät(etyp) das passende Template für das selektierte Gerät zur Anzeige gibt.

5.299 Beiträge seit 2008
vor 8 Jahren

also wenn man verschiedenerlei Gerätschaften hat, dann bastelt man normal für jede Art Gerätschaft ein DataTemplate.

Zur Anzeige dieser Templates nimmt man einen ContentPresenter. Den kann man an eine bunte Liste von Gerätschaften binden - je nachdem welche selected ist, wählt ein ContentPresenter das passende DataTemplate.

Der frühe Apfel fängt den Wurm.