Discussion:
Controls zur Laufzeit hinzufügen
(zu alt für eine Antwort)
Christian Mauerer
2008-11-28 14:20:22 UTC
Permalink
Hallo,

ich habe eine Frage, wie man Controls zur Laufzeit hinzufügen kann.
Und zwar bei WPF.

Bei den Windows Controls war es ja so:
groupBox.Controls.Add(neuesControl);

Doch so geht es nun nicht mehr.

Wie kann ich nun ein Control zur Laufzeit hinzufügen?

Vielen Dank und schöne Grüße
Christian
Elmar Boye
2008-11-28 14:44:00 UTC
Permalink
Hallo Cristian,
Post by Christian Mauerer
ich habe eine Frage, wie man Controls zur Laufzeit hinzufügen kann.
Und zwar bei WPF.
In WPF sollte man das eher vermeiden, denn komplexe
Controls zur Laufzeit erstellen ist eher ein Strapaze,
verglichen mit Xaml.

Schau Dir mal Sascha Barbers Artikel Serie auf Codeproject an:
<URL:http://www.codeproject.com/KB/WPF/BeginWPF1.aspx>

dort findest Du auch Beispiel in Code.

Gruß Elmar
Christian Mauerer
2008-11-28 14:57:31 UTC
Permalink
Hallo Elmar,

vielen Dank schon mal für den Beitrag.
Nun vielleicht muss ich das ein wenig anders formulieren.

Ich möchte User Controls erstellen.
Und diese müssen, je nachdem, was der User im Menü ausgewählt hat,
angezeigt werden, oder auch nicht.

Da muss es ja irgendeine Möglichkeit geben.
Denn wie soll ich so ein Problem sonst lösen?

Vielen Dank und schöne Grüße

Christian
Elmar Boye
2008-11-28 16:08:36 UTC
Permalink
Hallo Christian,
Post by Christian Mauerer
Nun vielleicht muss ich das ein wenig anders formulieren.
Etwas präziser wäre allerdings hilfreich... ;-)
Post by Christian Mauerer
Ich möchte User Controls erstellen.
UserControl control = new UserControl1();
Post by Christian Mauerer
Und diese müssen, je nachdem, was der User im Menü ausgewählt hat,
angezeigt werden, oder auch nicht.
Hier hängt es ein wenig davon ab, welchen Container Du
zur Verwaltung der Elemente verwendest.
Eine GroupBox wie zu Anfang wäre eher unüblich.

Von Panel abgeleitete Elemente (DockPanel, StackPanel, Grid)
haben eine Children Auflistung, an die man Elemente
anfügen kann.

Ein TabControl (als ItemsControl) wiederum verwendet ein
TabItem - für den Titel, der normalerweise auch noch
irgendwo herkommt - denen man das UserControl als Content
zuweist und das TabItem an die Item Auflistung anfügt.

Beschreibe ggf. mal Dein grundsätzliches Layout.

Gruß Elmar
Christian Mauerer
2008-11-28 16:17:07 UTC
Permalink
Hallo Elmar,

vielen Dank nochmals für die Infos.
Nun zum Layout.
Da steht noch gar nix fest, da die Anwendung neu erstellt wird und ich zum
ersten Mal WPF verwende.
Ich denke, es wird schon was mit DockPanel, Grid oder StackPanel zu tun
haben.
Das mit der Groupbox war nur ein Beispiel und wir so, wie du schon gesagt
hast, in diesem Zusammenhang nicht zum Einsatz kommen.

Schöne Grüße
Christian
Holger Hinzberg
2008-11-28 16:21:56 UTC
Permalink
On Fri, 28 Nov 2008 15:57:31 +0100, "Christian Mauerer"
Post by Christian Mauerer
Da muss es ja irgendeine Möglichkeit geben.
Denn wie soll ich so ein Problem sonst lösen?
Du kanst auch im C# Code Controlls erzeugen, wenn man sich dran
gewöhnt hat geht das auch ganz leicht von der Hand.
Leider gibt es im Netzt wenig WPF mit C# Beispiele - ich bin auch noch
am schreiben.

Die Frage ist, in was willst du deine Controlls hinzufügen?

Willst du Sie in einen Canvas geht das mit Add.Children, ebenso in
einem StackPanel

MainCanvas.Children.Add(loadColumnRect1);
Canvas.SetLeft(loadColumnRect1, 20);
Canvas.SetBottom(loadColumnRect1, 55);

Mit Children.Remove wirst du sie dann wieder los.

Controls erzeugst du im Code ganz normal mit new.

Etwas ungewöhnlich ist, das du die Methoden der Basisklasse aufrufen
musst um eine Objekt auf einem canvas zu positionieren.

Button myButton = new Button();
myButton.Height = 25;
myButton.Width = 100;
myButton.Content = "hallo";
mainCanvas.Children.Add(myButton);
Canvas.SetTop(myButton, 20);
Canvas.SetLeft(myButton,75);
Christian Mauerer
2008-11-28 17:51:30 UTC
Permalink
Hallo Holger,

vielen Dank für die ausführlichen Tipps.
Ich denke, das hilft mir auf alle Fälle weiter.

Ich melde mich, ob es geklappt hat.

Schöne Grüße
Christian

Loading...