Muchas de estas respuestas son simplistas, y si alguien está comenzando WPF, es posible que no conozca todos los "entresijos", ya que es más complicado que decirle a alguien " .ShowDialog()
¡ Usa !". Pero ese es el método (no .Show()
) que desea utilizar para bloquear el uso de la ventana subyacente y evitar que el código continúe hasta que se cierre la ventana modal.
Primero, necesitas 2 ventanas WPF. (Uno llamará al otro).
Desde la primera ventana, digamos que se llamó MainWindow.xaml, en su código subyacente será:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Luego agrega tu botón a tu XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
Y haga clic derecho en la Click
rutina, seleccione "Ir a definición". Lo creará para usted en MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
Dentro de esa función, debe especificar la otra página utilizando su clase de página. Supongamos que nombró a esa otra página "ModalWindow", de modo que se convierte en su clase de página y así es como la instanciaría (llamaría):
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Digamos que tiene un valor que necesita establecer en su diálogo modal. Cree un cuadro de texto y un botón en ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Luego, Click
vuelva a crear un controlador de eventos (otro evento) y úselo para guardar el valor del cuadro de texto en una variable estática pública ModalWindow
y llame 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();
}
}
Luego, después de su .ShowDialog()
declaración, puede tomar ese valor y usarlo:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}