Ich muss einen Dialog / eine Eingabeaufforderung einschließlich TextBox für Benutzereingaben erstellen. Mein Problem ist, wie man den Text erhält, nachdem man den Dialog bestätigt hat. Normalerweise würde ich dafür eine Klasse erstellen, die den Text in einer Eigenschaft speichert. Ich möchte den Dialog jedoch mit XAML entwerfen. Ich müsste also irgendwie den XAML-Code erweitern, um den Inhalt der TextBox in einer Eigenschaft zu speichern - aber ich denke, das ist mit reinem XAML nicht möglich. Was wäre der beste Weg, um zu realisieren, was ich tun möchte? Wie erstelle ich einen Dialog, der aus XAML definiert werden kann, aber dennoch irgendwie die Eingabe zurückgeben kann? Danke für jeden Hinweis!
81
Ich füge nur eine statische Methode hinzu, um sie wie eine MessageBox aufzurufen:
Und der Code dahinter:
Sie können es also so nennen:
quelle
MessageBox
statischen Methode im Stil. Prägnanter, wiederverwendbarer Code!Tolle Antwort von Josh, alle Ehre ihm, ich habe es jedoch leicht geändert:
MyDialog Xaml
MyDialog Code dahinter
Und nenn es woanders
quelle
WindowStyle="ToolWindow"
das Fenster einstellen, sieht es noch schöner aus. AuchWindowStartupLocation="CenterOwner"
unddialog.Owner = this;
positioniert es in der Mitte des übergeordneten FenstersSie brauchen nicht ANY diese anderen ausgefallenen Antworten. Im Folgenden ein einfaches Beispiel ist , dass nicht alle hat
Margin
,Height
,Width
in der XAML - Eigenschaften festlegen, sollten aber zeigen genug sein , wie dies auf einer grundlegenden Ebene getan.XAML
Erstellen Sie eine
Window
Seite wie gewohnt und fügen Sie Ihre Felder hinzu, z. B. aLabel
undTextBox
steuern Sie in aStackPanel
:Erstellen Sie dann einen Standard
Button
für die Übermittlung ("OK" oder "Übermitteln") und eine Schaltfläche "Abbrechen", wenn Sie möchten:Code-Behind
Sie fügen die
Click
Ereignishandlerfunktionen in den Code -Behind ein. Wenn Sie jedoch dorthin gehen, deklarieren Sie zunächst eine öffentliche Variable, in der Sie Ihren Textfeldwert speichern:Für die Ereignishandlerfunktionen (klicken Sie mit der rechten
Click
Maustaste auf die Funktion auf der Schaltfläche XAML, wählen Sie "Gehe zu Definition", sie wird für Sie erstellt) müssen Sie überprüfen, ob Ihr Feld leer ist. Sie speichern es in Ihrer Variablen, wenn dies nicht der Fall ist, und schließen Ihr Fenster:Aufrufen von einer anderen Seite
Sie denken, wenn ich dort oben mein Fenster damit schließe,
this.Close()
ist mein Wert weg, oder? NEIN!! Ich habe dies auf einer anderen Website herausgefunden: http://www.dreamincode.net/forums/topic/359208-wpf-how-to-make-simple-popup-window-for-input/Sie hatten ein ähnliches Beispiel dafür (ich habe es ein wenig aufgeräumt), wie Sie Ihre
Window
von einem anderen öffnen und die Werte abrufen können:Schaltfläche " Abbrechen" Sie denken, was ist mit dieser Schaltfläche "Abbrechen"? Also fügen wir einfach eine weitere öffentliche Variable in unser Popup-Fenster Code-Behind ein:
Lassen Sie uns unseren
btnCancel_Click
Event-Handler einbeziehen und eine Änderung vornehmen anbtnSubmit_Click
:Und dann lesen wir einfach diese Variable in unserer
MainWindow
btnOpenPopup_Click
Veranstaltung:Lange Antwort, aber ich wollte zeigen, wie einfach dies die Verwendung von
public static
Variablen ist. NeinDialogResult
, keine Rückgabewerte, nichts. Öffnen Sie einfach das Fenster, speichern Sie Ihre Werte mit den Schaltflächenereignissen im Popup-Fenster und rufen Sie sie anschließend in der Hauptfensterfunktion ab.quelle
DialogResult
in WPF, es istMessageBoxResult
, die ich nur aus Standard - Tasten auf einem Werk gefundenMessageBox.Show()
Dialog - nicht ein von einem Dialog benutzerdefinierten durch gezeigt.ShowDialog()
- und nur Abfrage für die Standard - Operatoren kann,MessageBoxResult.OK
,MessageBoxResult.Cancel
„Ja“ , "Nein" usw. - keine Booleschen Werte oder benutzerdefinierten Werte. 3)IsCancel
würde es erfordern, es in einem Booleschen Wert zu speichern und es trotzdem zurückzusenden, so dass dies eine Einheitslösung war.