Molte di queste risposte sono semplicistiche e se qualcuno sta iniziando WPF, potrebbe non conoscere tutti i "dettagli", in quanto è più complicato del dire semplicemente a qualcuno "Usa .ShowDialog()
!". Ma questo è il metodo (non .Show()
) che si desidera utilizzare per bloccare l'uso della finestra sottostante e impedire che il codice continui fino alla chiusura della finestra modale.
Innanzitutto, sono necessarie 2 finestre WPF. (Uno chiamerà l'altro.)
Dalla prima finestra, diciamo che è stato chiamato MainWindow.xaml, nel suo code-behind sarà:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Quindi aggiungi il pulsante al tuo XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
E fai clic con il tasto destro del mouse sulla Click
routine, seleziona "Vai alla definizione". Lo creerà per te in MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
All'interno di quella funzione, devi specificare l'altra pagina usando la sua classe di pagina. Supponiamo che tu abbia chiamato quell'altra pagina "ModalWindow", in modo che diventi la sua classe di pagina ed è il modo in cui la creeresti (chiamandola):
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Supponi di avere un valore che devi impostare nella finestra di dialogo modale. Crea una casella di testo e un pulsante in ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Quindi creare Click
nuovamente un gestore eventi (un altro evento) e utilizzarlo per salvare il valore della casella di testo in una variabile statica pubblica 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();
}
}
Quindi, dopo la tua .ShowDialog()
dichiarazione, puoi prendere quel valore e usarlo:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}