Banyak jawaban ini sederhana, dan jika seseorang memulai WPF, mereka mungkin tidak mengetahui semua "seluk beluk", karena lebih rumit daripada hanya mengatakan pada seseorang "Gunakan .ShowDialog()
!". Tetapi itu adalah metode (bukan .Show()
) yang ingin Anda gunakan untuk memblokir penggunaan jendela yang mendasarinya dan untuk menjaga kode dari melanjutkan sampai jendela modal ditutup.
Pertama, Anda membutuhkan 2 jendela WPF. (Satu akan memanggil yang lain.)
Dari jendela pertama, katakanlah yang disebut MainWindow.xaml, di belakangnya adalah:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Kemudian tambahkan tombol Anda ke XAML Anda:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
Dan klik kanan Click
rutinnya, pilih "Pergi ke definisi". Ini akan membuatnya untuk Anda di MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
Dalam fungsi itu, Anda harus menentukan halaman lain menggunakan kelas halamannya. Katakanlah Anda memberi nama halaman lain itu "ModalWindow", sehingga itu menjadi kelas halamannya dan bagaimana Anda akan instantiate (panggil) itu:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Katakanlah Anda memiliki nilai yang perlu Anda tetapkan pada dialog modal Anda. Buat kotak teks dan tombol di ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Kemudian buat pengendali acara ( Click
event lain ) lagi dan gunakan untuk menyimpan nilai textbox ke variabel statis publik ModalWindow
dan panggil 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();
}
}
Kemudian, setelah .ShowDialog()
pernyataan Anda, Anda bisa mengambil nilai itu dan menggunakannya:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}