Многие из этих ответов являются упрощенными, и если кто-то начинает WPF, он может не знать все «входы и выходы», поскольку это сложнее, чем просто сказать кому-то «Использовать .ShowDialog()
!» Но это метод (не .Show()
), который вы хотите использовать, чтобы заблокировать использование основного окна и не допустить продолжения кода до закрытия модального окна.
Для начала вам нужно 2 окна WPF. (Один будет звонить другому.)
В первом окне, скажем, он назывался MainWindow.xaml, в его коде будет:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Затем добавьте свою кнопку в свой XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
И щелкните правой кнопкой мыши подпрограмму Click
, выберите «Перейти к определению». Он создаст его для вас в MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
Внутри этой функции вы должны указать другую страницу, используя ее класс страницы. Скажем, вы назвали эту другую страницу «ModalWindow», чтобы она стала классом ее страницы и как бы вы ее (ее) создали:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Скажем, у вас есть значение, которое вам нужно установить в вашем модальном диалоге. Создайте текстовое поле и кнопку в ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Затем снова создайте обработчик события (еще одно событие Click
) и используйте его для сохранения значения текстового поля в общедоступной статической переменной в ModalWindow
и вызова 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();
}
}
Затем, после вашего оператора .ShowDialog()
, вы можете получить это значение и использовать его:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}