Багато з цих відповідей спрощені, і якщо хтось починає 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;
}