Entwickler-Ecke
WPF / Silverlight - Steuerelement von Page aus steuern
rapgru - Fr 30.01.15 11:02
Titel: Steuerelement von Page aus steuern
Hey Leute,
ich weiß das ist jetzt eine Frage die ich eigentlich selbst bentworten können müsste, aber:
Ich habe ein MainWindow, in der meine Symbolleiste ist und ein Menü, in dem man auswählen kann welche Page in den Frame geladen werden soll.
Der Rest des Fensters ist der Frame.
So, nun möchte ich wenn auf der Page mykontos ein Button gedrückt wird, dass die Visibility-Eigenschaft einer Label auf Visible gesetzt wird, sodass bei diesem Klick ein zweites Menü erscheint.
Also auf mykontos gibts ne ListView in der man seine Konten erstellen kann / löschen kann / etc. Wenn dann ein Projekt geladen wird, soll das Konto-Menü erscheinen, zur Verwaltung des geöffneten Kontos. Beim Schließen das Kontos wird das Menü wieder ausgeblendet.
So nun habe ich in MainWindow.xaml.cs folgende Funktion:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public static void DoKont() { MainWindow m = new MainWindow(); m.kontomenue_label.Visibility = System.Windows.Visibility.Visible; MessageBox.Show("Did changes"); } |
Und in mykontos.xaml.cs
C#-Quelltext
1: 2: 3: 4:
| private void button5_Click(object sender, RoutedEventArgs e) { MainWindow.DoKont(); } |
Die MessageBox wird beim drücken des Buttons angezeigt, die Label erscheint jedoch nicht. Was mache ich falsch??
LG rapgru
Th69 - Fr 30.01.15 13:24
Hallo,
danke ersteinmal, daß du hierfür ein neues Thema eröffnet hast (den Beitrag im anderen Thema habe ich gelöscht und das Thema wieder entsperrt).
Dein Grundfehler ist, daß du ein
neues Objekt erstellt, anstatt das vorhandene zu benutzen. Und warum ist die Methode statisch (ich weiß die technische Antwort, aber du solltest sie dir selber beantworten)?
Wenn du von 'mykontos' Zugriff auf das
MainWindow haben willst, dann solltest du dafür besser Ereignisse (events) benutzen - ein untergeordnetes Control (oder Window) sollte niemals Zugriff auf übergeordnete Controls haben.
Lies dir auch mal meinen Artikel dazu durch:
Kommunikation von 2 Forms [
http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] (gilt generell auch für WPF und MVVM).
rapgru - Fr 30.01.15 15:52
Dankeschön, laut Beitrag sollte ich also in meiner MainWindow.xaml.cs folgendes schreiben:
C#-Quelltext
1: 2: 3: 4: 5:
| public Visibility LabelVisibility { get { return label.Visibility } set { label.Visibility = value; } } |
Worauf ich dann von my Kontos zugreifen kann.
Habe ich das richtig verstanden?
rapgru - Fr 30.01.15 16:58
So hab jetzt meine Eigenschaft in MainWindow.xaml.cs hineingeschrieben,
was aber nicht im Text steht ist wie ich diese Eigenschaft aufrufe.
Ich hab's mit
C#-Quelltext
1: 2:
| MainWindow me = new MainWindow(); me.LabelVisibility = Visibility.Visible; |
gemacht. Scheint aber wieder nicht zu funktionieren. Was mache ich falsch?
Th69 - Fr 30.01.15 17:15
Wie schon geschrieben, erzeugst du so ein neues (unsichtbares) MainWindow-Objekt!
Du mußt entweder ein Ereignis von deiner Unterklasse 'mykontos' auslösen (und vom MainWindow abonnieren) oder aber (nicht so schöne, aber erstmal einfachere Lösung) übergib die MainWindow-Instanz an dem 'mykontos'-Konstruktor (und speichere diese Instanz in einer Membervariablen).
Ich weiß, für einen Anfänger, ersteinmal eine größere Hürde, aber nachdem man das einmal gemacht hat, geht das beim nächsten Mal aus dem Handgelenk.
rapgru - Fr 30.01.15 18:56
Tja, dann werde ich die 2. Variante wählen :D
Nach dem Motto Code sagt mehr als 1000 Worte hätte ich zu meiner vollen Zufriedenheit noch ein Code-Snippet, da ich das Stück "übergib die MainWindow-Instanz an den Mykonos-Konstruktor" nicht mitchecke.
Ralf Jansen - Fr 30.01.15 19:04
Ein Codebeispiel steht im vom TH69 geposteten Link. Ich würde dir empfehlen den zu lesen und zu versuchen ihn zu verstehen.
Shortcut : dort das Kapitel 'Typische Anfängerfehler - 1. Neues Form-Objekt erstellen'
Short-Shortcut : das letzte Codebeispiel in besagten Kapitel
rapgru - Fr 30.01.15 19:12
So weit war ich schon.
Welchen Parameter muss ich dann beim laden von Mykontos in den Frame angeben? Logischerweise
this oder?
Moderiert von
Th69: C#-Tags hinzugefügt
rapgru - Fr 30.01.15 19:14
Jup,
this funktioniert super! Dankeschön.
P.S.: Werd mir den Link sicher aufheben!
Moderiert von
Th69: C#-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!