74 votes

Comment afficher un custom UserControl sous forme de boîte de dialogue?

Comment afficher un UserControl personnalisé en tant que boîte de dialogue en C#/WPF (.NET 3.5)?

154voto

user7116 Points 39829

Placez-le dans une Fenêtre et appelez Window.ShowDialog. (Ajoutez également des références à : PresentationCore, WindowsBase et PresentationFramework si ce n'est pas déjà fait.)

private void Button1_Click(object sender, EventArgs e)
{
        Window window = new Window 
        {
            Title = "Ma boîte de dialogue de contrôle utilisateur",
            Content = new MyUserControl()
        };

        window.ShowDialog();
}

18 votes

J'ai également trouvé que définir SizeToContent = SizeToContent.WidthAndHeight et ResizeMode = ResizeMode.NoResize étaient utiles car cela permet à l'utilisateur de définir la taille.

4 votes

Comment pouvons-nous utiliser la fonction this.Close() sur cette boîte de dialogue UserControl?

4 votes

Private void btnClose_Click(object sender, RoutedEventArgs e) { var parent = this.Parent as Window; if (parent != null) { parent.DialogResult = true; parent.Close(); } }

14voto

WpfBegnner Points 51
Window window = new Window
            {
                Title = "Ma boîte de dialogue de contrôle utilisateur",
                Content = new OpenDialog(),
                SizeToContent = SizeToContent.WidthAndHeight,
                ResizeMode = ResizeMode.NoResize
            };
            window.ShowDialog();

A fonctionné comme par magie pour moi. Peut-il être transformé en boîte de dialogue modale ?


Réponse : ShowDialog le rend lui-même en boîte de dialogue modale...

0 votes

SizeToContent est très utile. Merci.

2voto

Pwninstein Points 7293

Autant que je sache, vous ne pouvez pas faire ça. Si vous voulez l'afficher dans une boîte de dialogue, c'est parfaitement possible, il suffit de créer une nouvelle fenêtre contenant uniquement votre UserControl, et d'appeler ShowDialog() après avoir créé une instance de cette fenêtre.

EDIT : Le UserControl class ne contient pas de méthode ShowDialog, donc ce que vous essayez de faire n'est en fait pas possible.

Ceci, en revanche, l'est :

private void Button_Click(object sender, RoutedEventArgs e){
    new ContainerWindow().ShowDialog();
}

0voto

Zenuka Points 1163

Je pense que mvermef voulait dire la partie concernant l'implémentation de Cinch de Application.DoEvents.

-1voto

user474051 Points 11

Si la réponse de 'sixlettervariables' est modifiée comme ça, ça fonctionne

private void button1_Click ( object sender, RoutedEventArgs e )                  
{
    Window window = new Window
    {
        Title = "Mon dialogue de contrôle utilisateur",
        Content = new UserControl ( ),
        Height = 200,  // juste ajouté pour avoir un contrôle plus petit (Fenêtre)
        Width = 240
    };

    window.ShowDialog ( );
}

14 votes

Vous avez oublié Background = Brushes.Purple; cela ne fonctionnera pas sans cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X