Non hai bisogno di NESSUNA di queste altre risposte fantasiose. Di seguito è riportato un esempio semplicistico che non ha tutto il Margin
, Height
, Width
proprietà impostate nel XAML, ma dovrebbe essere sufficiente per mostrare come ottenere questo fatto a un livello di base.
XAML
Crea una Window
pagina come faresti normalmente e aggiungi i tuoi campi, ad esempio a Label
e TextBox
controlla all'interno di a StackPanel
:
<StackPanel Orientation="Horizontal">
<Label Name="lblUser" Content="User Name:" />
<TextBox Name="txtUser" />
</StackPanel>
Quindi crea uno standard Button
per l'invio ("OK" o "Invia") e un pulsante "Annulla" se lo desideri:
<StackPanel Orientation="Horizontal">
<Button Name="btnSubmit" Click="btnSubmit_Click" Content="Submit" />
<Button Name="btnCancel" Click="btnCancel_Click" Content="Cancel" />
</StackPanel>
Code-Behind
Aggiungerai le Click
funzioni del gestore di eventi nel code-behind, ma quando vai lì, prima dichiara una variabile pubblica in cui memorizzerai il valore della casella di testo:
public static string strUserName = String.Empty;
Quindi, per le funzioni del gestore eventi (fai clic Click
con il pulsante destro del mouse sulla funzione sul pulsante XAML, seleziona "Vai a definizione", la creerà per te), è necessario un controllo per vedere se la casella è vuota. Lo memorizzi nella tua variabile se non lo è e chiudi la finestra:
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.");
}
Chiamalo da un'altra pagina
Stai pensando, se chiudo la mia finestra con quello this.Close()
lassù, il mio valore è andato, giusto? NO!! L'ho scoperto da un altro sito: http://www.dreamincode.net/forums/topic/359208-wpf-how-to-make-simple-popup-window-for-input/
Avevano un esempio simile a questo (l'ho ripulito un po ') di come aprire il tuo Window
da un altro e recuperare i valori:
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
}
}
Pulsante Annulla
Stai pensando, beh, che dire del pulsante Annulla, però? Quindi aggiungiamo di nuovo un'altra variabile pubblica nella nostra finestra pop-up code-behind:
public static bool cancelled = false;
E includiamo il nostro btnCancel_Click
gestore di eventi e apportiamo una modifica a 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.");
}
E poi leggiamo quella variabile nel nostro MainWindow
btnOpenPopup_Click
evento:
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
}
}
Risposta lunga, ma volevo mostrare quanto sia facile usare le public static
variabili. No DialogResult
, nessun valore di ritorno, niente. Basta aprire la finestra, memorizzare i valori con i pulsanti eventi nella finestra a comparsa, quindi recuperarli in seguito nella funzione della finestra principale.