Molte di queste risposte sono semplicistiche, e se qualcuno sta iniziando WPF, potrebbe non conoscere tutti i "in-out", in quanto è più complicato che dire a qualcuno "Usa .ShowDialog()
!". Ma questo è il metodo (non .Show()
) che si desidera utilizzare per bloccare l'uso della finestra sottostante e per impedire che il codice continui fino alla chiusura della finestra modale.
Innanzitutto, sono necessarie 2 finestre WPF. (Uno sarà chiamando l'altro.)
Dalla prima finestra, diciamo che è stato chiamato MainWindow.xaml, nella sua code-behind sarà:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Quindi aggiungere il pulsante al tuo XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
e fare clic con il Click
di routine, selezionare "Vai a definizione". Si creerà per voi in MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
all'interno di tale funzione, è necessario specificare l'altra pagina utilizzando la sua classe di pagina. Diciamo che con nome che altra pagina "finestra modale", in modo che diventa sua classe pagina ed è come si dovrebbe istanziare (chiamata) è:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Diciamo che avete un valore necessario impostare sulla vostra finestra di dialogo modale.Creare una casella di testo e un pulsante nella ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Poi creare un gestore di eventi (un altro evento Click
) di nuovo e usarlo per salvare il valore casella di testo per una variabile statica pubblica su ModalWindow
e chiamare this.Close()
.
public partial class ModalWindow : Window
{
public static string myValue = String.Empty;
public ModalWindow()
{
InitializeComponent();
}
private void btnSaveData_Click(object sender, RoutedEventArgs e)
{
myValue = txtSomeBox.Text;
this.Close();
}
}
Poi, dopo la vostra .ShowDialog()
dichiarazione, si può afferrare quel valore e usarlo:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}
Sto imparando, hehe ... Molto bello, grazie –
non dimenticate di impostare la proprietà Owner nella finestra di dialogo. Altrimenti, l'utente avrà un comportamento strano quando Alt + Tabbing, ecc. –
@EdwardBrey seriamente BIG PET PEEVE –