Wiele z tych odpowiedzi jest uproszczonych, a jeśli ktoś zaczyna WPF, może nie znać wszystkich „wejść i wyjść”, ponieważ jest to bardziej skomplikowane niż zwykłe powiedzenie komuś „Użyj .ShowDialog()
!”. Ale to jest metoda (nie .Show()
), której chcesz użyć, aby zablokować użycie okna bazowego i aby kod nie był kontynuowany, dopóki okno modalne nie zostanie zamknięte.
Najpierw potrzebujesz 2 okien WPF. (Jeden będzie dzwonił do drugiego.)
Załóżmy, że z pierwszego okna, które nazywało się MainWindow.xaml, w jego kodzie za nim będzie:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Następnie dodaj przycisk do kodu XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
Kliknij Click
procedurę prawym przyciskiem myszy i wybierz opcję „Przejdź do definicji”. Stworzy go dla Ciebie w MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
W ramach tej funkcji musisz określić drugą stronę za pomocą jej klasy strony. Powiedzmy, że nazwałeś tę drugą stronę „ModalWindow”, tak aby stała się ona klasą strony i tak można ją utworzyć (wywołać):
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Załóżmy, że masz wartość, którą chcesz ustawić w oknie modalnym. Utwórz pole tekstowe i przycisk w ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Następnie ponownie utwórz procedurę obsługi zdarzenia (inne Click
zdarzenie) i użyj jej do zapisania wartości pola tekstowego w publicznej zmiennej statycznej ModalWindow
i wywołaj 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();
}
}
Następnie po złożeniu .ShowDialog()
oświadczenia możesz pobrać tę wartość i użyć jej:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}