Muitas dessas respostas são simplistas e, se alguém está iniciando o WPF, pode não conhecer todas as "entradas e saídas", pois é mais complicado do que dizer a alguém "Use .ShowDialog()
!". Mas esse é o método (não.Show()
) que você deseja usar para bloquear o uso da janela subjacente e impedir que o código continue até que a janela modal seja fechada.
Primeiro, você precisa de 2 janelas WPF. (Um vai ligar para o outro.)
Na primeira janela, digamos que se chame MainWindow.xaml, em seu code-behind será:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Em seguida, adicione seu botão ao seu XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
E clique com o botão direito do mouse na Click
rotina, selecione "Ir para a definição". Ele será criado para você no MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
Dentro dessa função, você deve especificar a outra página usando sua classe de página. Digamos que você nomeou essa outra página como "ModalWindow", para que ela se torne sua classe de página e é como você a instanciaria (chamava):
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Digamos que você tenha um valor que precisa definir na sua caixa de diálogo modal. Crie uma caixa de texto e um botão no ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Em seguida, crie um manipulador de eventos (outro Click
evento) novamente e use-o para salvar o valor da caixa de texto em uma variável estática pública ModalWindow
e ligar 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();
}
}
Depois da sua .ShowDialog()
declaração, você pode pegar esse valor e usá-lo:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}