9
votes

Comment puis-je arrêter une fenêtre de dialogue de se cacher

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();


2 commentaires

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


3 Réponses :


1
votes

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;
                }
            }
        }


3 commentaires

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 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.



8
votes

Vous devez définir la propriété propriétaire.

MyDialog d = new MyDialog();
d.Owner = Application.Current.MainWindow;//or your owning window
d.ShowDialog();


1 commentaires

J'utilise popupwindowaction dans mon application WPF. Réglage du propriétaire à la fenêtre principale était la clé pour obtenir le comportement décrit que nous connaissons de Windows MessageBox . (Merci, j'ai cherché une heure ...!)



1
votes

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;


0 commentaires