Dans une application WPF, je voudrais mettre en œuvre le comportement suivant qui ne semble pas fonctionner simple:Comment implémenter correctement une boîte de dialogue modale en haut d'une boîte de dialogue non modale?
Dans la fenêtre principale (Window1
), l'utilisateur ouvre une fenêtre non modale (Window2
), et que non La fenêtre modale peut afficher une boîte de dialogue modale (Window3
). Le problème est que lorsque la boîte de dialogue modale a été affichée, la fenêtre principale disparaît en arrière-plan (étant donné que des fenêtres d'autres applications sont ouvertes) lorsque l'utilisateur ferme les boîtes de dialogue.
Y a-t-il quelque chose qui ne va pas dans la façon dont j'utilise Window.Owner
et Window.Show()
/Window.ShowDialog()
, est-ce un bug ou est-ce que ce n'est simplement pas supporté?
Le simple suivant l'application WPF illustre ce comportement:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window2 win = new Window2();
win.Owner = this;
win.Show();
}
}
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window3 win = new Window3();
win.Owner = this;
win.ShowDialog();
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
public partial class Window3 : Window
{
public Window3()
{
InitializeComponent();
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
XAML Window1
:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Button Click="Button_Click">Show non-modal window</Button>
</Window>
XAML Window2
:
<Window x:Class="WpfApplication1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2">
<StackPanel>
<Button Click="Button_Click">Show modal dialog</Button>
<Button Name="btnClose" Click="btnClose_Click">Close</Button>
</StackPanel>
</Window>
XAML Window3
:
<Window x:Class="WpfApplication1.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window3">
<Button Name="btnClose" Click="btnClose_Click">Close</Button>
</Window>
MISE À JOUR: Correction de la correction & collez l'erreur dans le code. C'est .NET 3.5 SP1 au cas où cela soit important.