Многие из этих ответов упрощены, и если кто-то начинает 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;
}