Muchas de estas respuestas son simplistas, y si alguien está comenzando WPF, es posible que no conozcan todos los "in-and-outs", ya que es más complicado que simplemente decirle a alguien "¡Use .ShowDialog()
!". 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.
En primer lugar, necesita 2 ventanas de WPF. (Una de ellas será llamar a la otra.)
Desde la primera ventana, digamos que se llamaba MainWindow.xaml, en su código subyacente será:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Publique sus botón a su XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
y haga clic con la rutina Click
, seleccione "Ir a definición". Se va a crear para usted en MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
Dentro de esta función, tiene que especificar la otra página utilizando su clase de página. Digamos que usted nombró otra página "ModalWindow", por lo que se convierte en su clase de página y es cómo se instancia (llamada) que:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Digamos que tiene un valor que será necesario que ajuste en su diálogo modal.Crear un cuadro de texto y un botón en el ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
A continuación, cree un controlador de eventos (otro Click
caso) de nuevo y lo utilizan para guardar el valor del cuadro de texto a una variable estática pública sobre 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();
}
}
Entonces, después de su declaración .ShowDialog()
, se puede agarrar ese valor y utilizarlo:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}
estoy aprendiendo, jeje ... Muy bonito, gracias –
No se olvide de establecer la propiedad Owner en la ventana de diálogo. De lo contrario, el usuario obtendrá un comportamiento extraño cuando Alt + Tabbing, etc. –
@EdwardBrey en serio BIG PET PEEVE –