none
Source ändern eines Navigation Fensters bzw. Schließen eines Fensters ohne schließen der Anwendung - WPF RRS feed

  • Frage

  • Hallo Zusammen,

     

    eventuell habe ich mich verzettelt. Aber ich habe meine Anwendung wie folgt designed:

    Application --> Source öffnet Navigation Window --> Navigation Window enthält MasterWindow mit Frames wo die Pages dann drin sind.

    Ich möchte nun im Navigation Window auf ein anderes Navigation Window verweisen.

    In meinem Beispiel:

    Applikationsstart öffnet Login Fenster (kleines Logon Fenster). Wenn die Login Daten ausgefüllt sind drückt er den Login Button und dann soll sich das eigentliche Navigationsfenster öffnen.

    Das neue Fenster zu öffnen ist ja einfach. Ich kann aber das bestehende fenster nicht schließen, da ich ja dann die Applikation schließe..

    Daher die Frage, kann ich die Source neu zuweisen in der Application, die ja bereits an das NavigationWindow 1 vergeben ist,,,

     

    Danke für Hilfe

    Gruss

    Torsten

    Mittwoch, 22. Dezember 2010 15:54

Antworten

  • Schau dir dies hier mal an:

        public partial class App : Application
        {
            protected override void OnStartup(StartupEventArgs e)
            {
               //LoginWindow erstellen
               LoginWindow login = new LoginWindow();

               //LoginWindow anzeigen
               bool? result = login.ShowDialog();

               //Überprüfen, ob der Dialog mit OK/Login geschlossen wurde
               if ((bool)result)
               {
                   //Überprüfen, ob der Login erfolgreich war
                   if (login.IsValid) //Im LoginWindow ein Property implemtieren, das den Login Status hält
                   {
                       //NavigationWindow erstellen, als Haupfenster zuweisen und anzeigen
                       NavigationWindow main = new NavigationWindow();
                       this.MainWindow = main;
                       this.MainWindow.ShowDialog();
                    }
               }
        }   

    • Als Antwort markiert Pattasatto Dienstag, 4. Januar 2011 13:28
    Montag, 3. Januar 2011 14:02
    Beantworter

Alle Antworten

  • Hi Torsten,

    warum öffnest Du nicht aus der App heraus das Hauptfenster, nachdem der Login erfolgreich war? Sprich, Login per ShowDialog öffnen, dann Erfolg prüfen und entweder beenden, oder halt Dein Hauptfenster öffnen ..?


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Mittwoch, 22. Dezember 2010 17:57
  • Für solche Fälle geht immer folgendes.

    Du hast also deinen kleinen LoginFrame. Wenn du da jetzt den entsprechenden Button clicks, das sich de Haupframe öffner, machst du folgendes:

     

    in deinem loginframe:

    MainFrane frame = new Mainframe(this);

    frame.show

    in deinem Mainframe:

    loginframe loginframehandle;

    //der Konstruktor:

    public MainFrame (loginframe handle)

    {

    loginframehandle = handle;

    }

    So, also du hast eine Instanz deines LoginFrames übergeben. Da die ObjectVariable global in deinem Mainframe definiert ist, kannst du jetzt überall in deinem Mainframe schreiben:

    loginfarmehandle.Close();

    Dann schließt sich natürlich der erste frame.

    Diese Art und Weise ist übrigens immer klasse. wenn du jetzt im Mainframe loginframehandle schreibst und einen Punkt setzt geht ja IntelSense auf und bietet dir alle Variablen und Methoden des LoginmFrames an. Natürlich mußt du die ensprchenden Variablen immer als internal oder public deklarierendamit sie auch erschienen.

     

    ciao..

    Mittwoch, 22. Dezember 2010 23:04
  • Hallo Zusammen,

     

    danke für die Beiträge.

    Mal ein anderer simpler Ansatz:

    Wie kann ich über die Application eine neue Seite laden?

    Dies geht nicht bzw. zeigt nichts an:

        DIM URL as system.uri = new uri("NeueSeite",urikind.relativeorabsolue)

        Application.Loadcomponent(URL)

     

    Hier wäre mein simpler Ansatz einfach über die Application die Seite neu zu laden. Alternativ habe ich:

    Dim Window as new AppWindow

    Window.show

    application.current.mainwindow.close()

    window.showactivated = True bzw. window.activate

    Diese Option löst allerdings in der Seite meine Sub Onclosing(byval e as canceleventargs) aus.... dies ist ja plöd....

     

    Gruss

    Torsten

    Donnerstag, 23. Dezember 2010 09:10
  • Überschreib in der App die OnStartup Methode. Dort rufst du zuerst das Login auf.
    Wenn der Login erfolgreich war, erstelle das Nav Window und weise es der App als MainWindow zu.

    Donnerstag, 23. Dezember 2010 12:14
    Beantworter
  • Danke für Deine Antwort..

    Hat jemand nen CodeSchnippsel für mich... Kann mir das so nicht richtig vorstellen.

     

    Danke.

    Samstag, 25. Dezember 2010 11:21
  • Schau dir dies hier mal an:

        public partial class App : Application
        {
            protected override void OnStartup(StartupEventArgs e)
            {
               //LoginWindow erstellen
               LoginWindow login = new LoginWindow();

               //LoginWindow anzeigen
               bool? result = login.ShowDialog();

               //Überprüfen, ob der Dialog mit OK/Login geschlossen wurde
               if ((bool)result)
               {
                   //Überprüfen, ob der Login erfolgreich war
                   if (login.IsValid) //Im LoginWindow ein Property implemtieren, das den Login Status hält
                   {
                       //NavigationWindow erstellen, als Haupfenster zuweisen und anzeigen
                       NavigationWindow main = new NavigationWindow();
                       this.MainWindow = main;
                       this.MainWindow.ShowDialog();
                    }
               }
        }   

    • Als Antwort markiert Pattasatto Dienstag, 4. Januar 2011 13:28
    Montag, 3. Januar 2011 14:02
    Beantworter