Sie 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. a Label
und TextBox
steuern Sie in a StackPanel
:
<StackPanel Orientation="Horizontal">
<Label Name="lblUser" Content="User Name:" />
<TextBox Name="txtUser" />
</StackPanel>
Erstellen Sie dann einen Standard Button
für die Übermittlung ("OK" oder "Übermitteln") und eine Schaltfläche "Abbrechen", wenn Sie möchten:
<StackPanel Orientation="Horizontal">
<Button Name="btnSubmit" Click="btnSubmit_Click" Content="Submit" />
<Button Name="btnCancel" Click="btnCancel_Click" Content="Cancel" />
</StackPanel>
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:
public static string strUserName = String.Empty;
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:
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
if (!String.IsNullOrEmpty(txtUser.Text))
{
strUserName = txtUser.Text;
this.Close();
}
else
MessageBox.Show("Must provide a user name in the textbox.");
}
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:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnOpenPopup_Click(object sender, RoutedEventArgs e)
{
MyPopupWindow popup = new MyPopupWindow(); // this is the class of your other page
//ShowDialog means you can't focus the parent window, only the popup
popup.ShowDialog(); //execution will block here in this method until the popup closes
string result = popup.strUserName;
UserNameTextBlock.Text = result; // should show what was input on the other page
}
}
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:
public static bool cancelled = false;
Lassen Sie uns unseren btnCancel_Click
Event-Handler einbeziehen und eine Änderung vornehmen an btnSubmit_Click
:
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
cancelled = true;
strUserName = String.Empty;
this.Close();
}
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
if (!String.IsNullOrEmpty(txtUser.Text))
{
strUserName = txtUser.Text;
cancelled = false; // <-- I add this in here, just in case
this.Close();
}
else
MessageBox.Show("Must provide a user name in the textbox.");
}
Und dann lesen wir einfach diese Variable in unserer MainWindow
btnOpenPopup_Click
Veranstaltung:
private void btnOpenPopup_Click(object sender, RoutedEventArgs e)
{
MyPopupWindow popup = new MyPopupWindow(); // this is the class of your other page
//ShowDialog means you can't focus the parent window, only the popup
popup.ShowDialog(); //execution will block here in this method until the popup closes
// **Here we find out if we cancelled or not**
if (popup.cancelled == true)
return;
else
{
string result = popup.strUserName;
UserNameTextBlock.Text = result; // should show what was input on the other page
}
}
Lange Antwort, aber ich wollte zeigen, wie einfach dies die Verwendung von public static
Variablen ist. Nein DialogResult
, 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.