myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und Silverlight » Probleme mit schließen/ändern von UserControls
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Probleme mit schließen/ändern von UserControls

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Wanna
myCSharp.de-Mitglied

Dabei seit: 31.07.2010
Beiträge: 11


Wanna ist offline

Probleme mit schließen/ändern von UserControls

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

bin relativ neu im C# Bereich. Habe umfassend Google und die Forensuche bemüht aber leider nichts gefunden. Bin mir sicher, dass mein Problem relativ einfach gelöst werden kann. Aber finde die Lösung leider nicht selbst. Habe vielleicht auch einfach nach dem falschen gesucht:

Hier erst einmal was ich habe:
MainWindow.xaml.cs:

C#-Code:
namespace xxx
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            contentControlMainWindow.Content = new Startfenster();
        }

        private void MenuItemBeenden_Click(object sender, RoutedEventArgs e)
        {
            //Progamm Beenden
            Application.Current.Shutdown();
        }

        private void MenuItemMannschaftErstellen_Click(object sender, RoutedEventArgs e)
        {
            //Fenster bereitstellen für neue Mannschaft
            contentControlMainWindow.Content = new MannschaftErstellen();
        }
    }
}

Die einzelnen UserControls möchte ich in einem ContentControl darstellen. Ist die Lösung wie ich sie hier habe korrekt (wird zumindest das gemacht was ich möchte). Oder ist das vom Code her eher unsauber?


Nun aber zum eigentlichen Problem:

C#-Code:
namespace xxx
{
    /// <summary>
    /// Interaktionslogik für MannschaftErstellen.xaml
    /// </summary>
    public partial class MannschaftErstellen : UserControl
    {
        public MannschaftErstellen()
        {
            InitializeComponent();
        }

        private void btnMannschaftErfassen_Abbrechen_Click(object sender, RoutedEventArgs e)
        {
            //Fenster Schließen
        }
    }
}

Beim Click auf den Abbrechen Button (btnMannschaftErfassen_Abbrechen_Click...) möchte ich, dass das Usercontrol MannschaftErstellen geschlossen wird und wieder mein UserControl Startfenster geladen wird.


Meine bisherigen Versuche über Events, die soweit ich verstanden habe nur in Klassen verwendet werden können, sind gescheitert.

Ich habe momentan einfach das Problem, wie ich vom UserControl aus meinem ContentControl im MainWindow sagen kann, es solle wieder das Startfenster Laden und wie ich das UserControl MannschaftErstellen schließen kann.

Ich hoffe ihr könnt mir helfen.

Danke,
Wanna

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Wanna am 04.08.2010 10:06.

01.08.2010 17:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.999


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was bedeutet es ein Control zu "schließen"?
Meinst du ausblenden und stattdessen ein anderes anzeigen? Das wär aber etwas ganz anderes als dein Kommentar "Fenster schließen".
Hide und Show kennst du, bzw. die Eigenschaft Visible?
01.08.2010 22:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Wanna
myCSharp.de-Mitglied

Dabei seit: 31.07.2010
Beiträge: 11

Themenstarter Thema begonnen von Wanna

Wanna ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

mir sind die Befehle mehr oder weniger schon bekannt ja. Aber der unterschied zwischen schließen und "hiden" ist ja der, dass wenn ich das Fenster schließe, es beim nächsten aufruf neu instanziieren muss. Beim HIDE muss ich es ja nur wieder anzeigen. Verstehe ich das richtig?

Wenn ja würde ich es schon ganz gerne schließen können. Um beim nächsten mal wieder ein neues (mit leeren Feldern) aufrufen zu können.

Mein Problem ist ja nachwievor, wie ich aus dem Usercontrol Fenster aus mein ConentControl Elemen im MainWindow ansteuern kann um z.B. wieder das Startfenster also content festzusetzen.

Gleichzeitig sollte sich natürlich das momentan im content angezeigte fenster schließen

Grüße,
Wanna
02.08.2010 10:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.999


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie das beim Close bei einem Fenster ist weiß ich ehrlich gesagt nicht genau. Ich glaub das kann man dann schon auch wiederverwenden. Ich tu sowas nicht.

Ich komm mit deinen Formulierungen noch nicht klar. Ein Control ist ein Element innerhalb eines Fensters. Fenster schließt man, Controls nicht. Die blendet man höchstens aus.
Du bringst das irgendwie noch durcheinander.
02.08.2010 14:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Wanna
myCSharp.de-Mitglied

Dabei seit: 31.07.2010
Beiträge: 11

Themenstarter Thema begonnen von Wanna

Wanna ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mhh, das ist mir schon klar. Ich versuche mal das ganze anders zu beschreiben:

Mein Control im MainWindow:

C#-Code:
contentControlMainWindow.Content = new Startfenster();

Hier lade ich das Startfenster.

Mit klick auf einen Button lade ich das Fenster Mannschafterstellen:

C#-Code:
contentControlMainWindow.Content = new MannschaftErstellen();

wenn ich jetzt in dem geladenen Fenster MannschaftErstellen auf den Button "Abbrechen" klicke möchte ich.

C#-Code:
private void btnMannschaftErfassen_Abbrechen_Click(object sender, RoutedEventArgs e)
{
     //Hier möchte ich eigentlich das contentControlMainWindow.Content steuern
}

Das das Fenster zugeht und wieder das Startfenster angezeigt wird. Ich schaffe es aber nicht aus dem Fenster aus das "contentControlMainWindow.Content" zu steuern.

Nun klarer was ich vorhabe?

EDIT:
Habe nun herausgefunden, dass ich über

C#-Code:
this.Visibility = Visibility.Hidden;

mein Fesnter ausblenden kann. Aber wie ich dann mein Startfenster wieder lade schaffe ich nach wie vor noch nicht!


Grüße,
Wanna

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Wanna am 02.08.2010 15:34.

02.08.2010 14:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 1.999


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Versuch es mal ein bisschen abstrakter. Erklär einfach mal zum Beispiel dass du ein Fenster hast in dem du mehrere Controls darstellen willst. Ohne wie die heißen, dafür aber mit der Info um was für einen Typ (Klasse) es sich handelt. Und da soll dann irgendwas passieren, das bisher noch nicht so durchgedrungen ist. Inhalte, in deinem Fall Bezeichner ohne weitere Info, lenken gerne vom eigentlichen Problem ab.

Zitat:
Aber wie ich dann mein Startfenster wieder lade...

Um mal böse zu sein und bei deinem Begriff zu bleiben, laden geht mit File.Read... ;-)
Aber bei einem Fenster? Ein Fenster wird mit new erzeugt und mit Show angezeigt. Was meinst du mit laden? Und - gehts tatsächlich um ein Fenster oder um ein Control? Du schreibst "contentControlMainWindow.Content = new Startfenster();", also praktisch Control = Fenster.

Es ist schon wichtig das so zu beschreiben dass man vom gleichen spricht. Nur dann passt die Antwort auch zur Frage.
02.08.2010 17:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Pupps
myCSharp.de-Mitglied

Dabei seit: 28.07.2010
Beiträge: 3


Pupps ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hey,
also entweder hab ichs jetzt falsch verstanden, oder dir wirdn
this.Close();
weiterhelfen verwundert

mfg
03.08.2010 12:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Wanna
myCSharp.de-Mitglied

Dabei seit: 31.07.2010
Beiträge: 11

Themenstarter Thema begonnen von Wanna

Wanna ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Versuch 3:

Ich habe eine WPF Anwendung mit einem Fenster. In diesem Fenster habe ich ein Element vom Typ ContentControl. In dieses ContentControl lade ich verschiedene UserControls.

Mein Problem. Vom Hauptfenster, in welchem das ContentControl erstellt wurde kann ich ja ganz normal darauf zugreifen. Wenn ich jetzt ein UserControl in diesem ContentControl darstellen lasse, kann ich jedoch innerhalb des UserControls nicht mehr auf das ContentControl zugreifen um ihm beispielsweise zu sagen "Hey, ich bin fertig, du kannst nun das andere UserControl" anzeigen.


Ich weiß ehrlich gesagt nicht mehr wie ich das noch anders beschreiben soll ...
04.08.2010 10:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Pupps
myCSharp.de-Mitglied

Dabei seit: 28.07.2010
Beiträge: 3


Pupps ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

also du hast 2 usercontrols in einem ContentControl und willst die nacheinander anzeigen lassen? hoffe ich habs richtig verstanden :D

ich bin gerade nich sicher aber vlt kannste dir das control in deinen children raussuchen und wegschmeissen? ;)
ansonsten würde für deine zwecke nicht auch reichen wendes unsichtbar machst, und dem einen sacht es soll sichbar werden, wenn des andere unsichtbar wird :D (IsVisibleChanged)

mfg

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Pupps am 04.08.2010 10:34.

04.08.2010 10:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Wanna
myCSharp.de-Mitglied

Dabei seit: 31.07.2010
Beiträge: 11

Themenstarter Thema begonnen von Wanna

Wanna ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

nein es sind nicht nur zwei UserControls. Es sind viele :D
Das mit dem verstecken mache ich ja schon. Ich will einfach nur aus dem UserControl das ContentControl ansteuern können. Hat denn da niemand eine Lösung parat?

Grüße
04.08.2010 14:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 8 Jahre.
_Cashisclay _Cashisclay ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.10.2014
Beiträge: 242


_Cashisclay ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Servus,

bin gerade auf das selbe Problem gestoßen, der Kollege vor mir steuert aus dem MainWindow mit einer ContentControl UserControl's an, allerdings wie krieg ich denn ein UserControl wieder geschlossen um mir quasi im MainWindow den Rückgabewert zu holen um das dann weiterzuverarbeiten?

Grüße
07.05.2019 09:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
KroaX KroaX ist männlich
myCSharp.de-Mitglied

avatar-4080.jpg


Dabei seit: 31.08.2009
Beiträge: 264
Entwicklungsumgebung: VS2012
Herkunft: Köln


KroaX ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du musst zunächst in deinem UserControl ( welches ja im ContentControl gehostet wird ) erstmal definieren WANN dass denn überhaupt passiert. Sprich dein im MainWindow befindliches Usercontrol muss signalisieren "Hey ich bin hier fertig" damit dein Mainwindow weiß wann es einen Wert dieses UserControls auslesen muss um dies dann weiter zu verarbeiten.

Zumindest von der Idee her.

Die eigentliche Umsetzung klingt dabei noch ziemlich dirty. Was du eigentlich möchtest ist so eine Art Content Browser für deine Anwendung. Das ist nicht unbedingt trivial. Ich selbst löse sowas mit ViewModels und Datatemplates und navigiere nur zwischen den einzelnen ViewModels hin und her. Dabei wissen die einzelnen ViewModels allerdings nie etwas voneinander. Sprich sie sind nicht abhängig voneinander.

Eventuell wäre es in deinem Fall leichter wenn du hier mit einem Dialog Fenster ( Modal ) arbeitest. Dabei kannst du einfacher mit Ergebnissen arbeiten? Zumindest mache ich das meistens so. Die Visualisierung eines modalen Dialogs kannst du ja selbst beeinflussen.
07.05.2019 09:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.271
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Verwende ein Ereignis dafür:  [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)

Dein UserControl (bzw. dessen ViewModel) wirft dieses Ereignis und das MainWindow (bzw. dessen ViewModel) abonniert dieses dann und ändert dann den Content.

Btw: Bei WPF solltest du  [Artikel] MVVM und DataBinding verwenden!
Mittels DataBinding könntest du dann eine Eigenschaft IsClosed (oder IsCanceled) (bzw. als Command Close (bzw. Cancel)) stattdessen benutzen.
07.05.2019 09:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Jahre.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.07.2019 06:54