Beaucoup de ces réponses sont simplistes, et si quelqu'un commence WPF, il se peut qu'il ne connaisse pas tous les «tenants et aboutissants», car c'est plus compliqué que de simplement dire à quelqu'un «Utilisez .ShowDialog()
!». Mais c'est la méthode (non .Show()
) que vous souhaitez utiliser pour bloquer l'utilisation de la fenêtre sous-jacente et empêcher le code de continuer jusqu'à ce que la fenêtre modale soit fermée.
Tout d'abord, vous avez besoin de 2 fenêtres WPF. (L'un appellera l'autre.)
À partir de la première fenêtre, disons que cela s'appelait MainWindow.xaml, dans son code-behind sera:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
Ajoutez ensuite votre bouton à votre XAML:
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
Et cliquez avec le bouton droit sur la Click
routine, sélectionnez "Aller à la définition". Il le créera pour vous dans MainWindow.xaml.cs:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
Dans cette fonction, vous devez spécifier l'autre page en utilisant sa classe de page. Supposons que vous ayez nommé cette autre page "ModalWindow", pour qu'elle devienne sa classe de page et que vous souhaitiez l'instancier (l'appeler):
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
Supposons que vous ayez une valeur à définir dans votre boîte de dialogue modale. Créez une zone de texte et un bouton dans le ModalWindow
XAML:
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
Ensuite, créez à nouveau un gestionnaire d'événements (un autre Click
événement) et utilisez-le pour enregistrer la valeur de la zone de texte dans une variable statique publique sur ModalWindow
et appelez 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();
}
}
Ensuite, après votre .ShowDialog()
déclaration, vous pouvez saisir cette valeur et l'utiliser:
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}