Si je crée une classe dérivée de System.Windows.window et montrez-la avec ShowDialog, il apparaît au-dessus de la fenêtre principale comme prévu et la fenêtre principale est désactivée. Cependant, il est possible de mettre les deux fenêtres derrière d'autres applications, puis apportez simplement la fenêtre principale. Cela laisse simplement une fenêtre unique qui semble s'être écrasé et peut être déroutant.
est-il possible de s'assurer que la fenêtre de dialogue est toujours affichée si la fenêtre principale est affichée? La boîte de dialogue MessageBox.Show n'a aucun problème de ce type P>
Mise à jour: strong> p> Une boîte de dialogue de test est définie comme p> MyDialog d = new MyDialog();
d.ShowDialog();
3 Réponses :
Pour vous assurer que la fenêtre de dialogue est toujours affichée si la fenêtre principale est affichée, ajoutez un gestionnaire à la visibilité de la forme principale modification de l'événement pour définir le plus haut code> FORME ou FALSE to Enfant Selon la visibilité principale public override bool Visible
{
get
{
return base.Text;
}
set
{
base.Text = value;
// Insert my code
if (frmDLg != null && !frmDLg.IsDisposed)
{
frmDLg.TopMost = this.Visible;
}
}
}
J'utilise System.Windows.Window n'est pas un formulaire et qui n'a pas de propriété d'événements visibléchant. Désolé de ne pas faire ça clair
Désolé, je ne peux pas trouver System.Windows.window dans Dot Net 3.5, Toute façon si vous pouvez trouver la fenêtre.Visible Propriété afin d'essayer de le remplacer afin que mon mainfrmvisibleChanged code> Utilisez la mise à jour de la vérification de la propriété visible Là-haut
Les détails sont à msdn.microsoft.com/en-us/library /ystem.windows.window.aspx Merci pour les suggestions, mais les paramètres du propriétaire résout le problème de mon cas.
Vous devez définir la propriété propriétaire.
MyDialog d = new MyDialog(); d.Owner = Application.Current.MainWindow;//or your owning window d.ShowDialog();
J'utilise popupwindowaction code> dans mon application WPF. Réglage du propriétaire i> à la fenêtre principale était la clé pour obtenir le comportement décrit que nous connaissons de Windows MessageBox i>. (Merci, j'ai cherché une heure ...!)
Ce code doit fonctionner comme vous voulez
public MainWindow()
{
InitializeComponent();
this.Activated += new EventHandler(MainWindow_Activated);
}
void MainWindow_Activated(object sender, EventArgs e)
{
if (m == null)
return;
m.Activate();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
m = new MyDialog();
m.ShowDialog();
}
MyDialog m;
Utilisez-vous la méthode de formulaire :: showdialog (iwin32window)? La boîte de dialogue avec la fenêtre du propriétaire devrait se comporter comme vous vous attendez.
Je n'utilise pas les formulaires, c'est un système.windows.window et showdialog ne prend aucun paramètre