Многие из этих ответов упрощены, и если кто-то начинает 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)
{
}
В пределах этой функции, вы должны указать другую страницу, используя свою страницу класс. Допустим, вы назвали, что другая страница «модальное окно», так что становится его страницы класс и как вы бы создать экземпляр (вызов) это:
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;
}
Я учусь, хе-хе ... Очень приятно, спасибо –
Не забудьте установить свойство Owner в диалоговом окне. В противном случае пользователь получит странное поведение, когда Alt + Tabbing и т. Д. –
@EdwardBrey серьезно BIG PET PEEVE –