Viele dieser Antworten sind simpel, und wenn jemand mit der WPF beginnt, kennt er möglicherweise nicht alle "Vor- und Nachteile", da dies komplizierter ist, als nur jemandem "Verwenden .ShowDialog()
!" Zu sagen . Dies ist jedoch die Methode (nicht .Show()
), die Sie verwenden möchten, um die Verwendung des zugrunde liegenden Fensters zu blockieren und zu verhindern, dass der Code fortgesetzt wird, bis das modale Fenster geschlossen wird.
Zunächst benötigen Sie 2 WPF-Fenster. (Einer wird den anderen anrufen.)
Nehmen wir vom ersten Fenster an an, dass MainWindow.xaml in seinem Code-Behind heißt:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Fügen Sie dann Ihre Schaltfläche zu Ihrer XAML hinzu:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
Klicken Sie mit der rechten Maustaste auf die Click
Routine und wählen Sie "Zur Definition gehen". Es wird es für Sie in MainWindow.xaml.cs erstellen:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
Innerhalb dieser Funktion müssen Sie die andere Seite anhand ihrer Seitenklasse angeben. Angenommen, Sie haben diese andere Seite "ModalWindow" genannt, damit sie zu ihrer Seitenklasse wird und Sie sie instanziieren (aufrufen) würden:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Angenommen, Sie haben einen Wert festgelegt, den Sie in Ihrem modalen Dialogfeld festlegen müssen. Erstellen Sie ein Textfeld und eine Schaltfläche in der ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Erstellen Sie dann erneut einen Ereignishandler (ein anderes Click
Ereignis) und verwenden Sie ihn, um den Textfeldwert in einer öffentlichen statischen Variablen zu speichern ModalWindow
und aufzurufen 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();
}
}
Nach Ihrer .ShowDialog()
Aussage können Sie diesen Wert abrufen und verwenden:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}