คำตอบเหล่านี้จำนวนมากเป็นเรื่องง่ายและหากมีคนเริ่มใช้ 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;
}