web-dev-qa-db-fra.com

Comment affichez-vous un UserControl personnalisé sous forme de boîte de dialogue?

Comment affichez-vous un UserControl personnalisé sous forme de boîte de dialogue dans C #/WPF (.NET 3.5)?

66
Taylor Leese

Placez-le dans un Window et appelez Window.ShowDialog .

private void Button1_Click(object sender, EventArgs e)
{
    Window window = new Window 
    {
        Title = "My User Control Dialog",
        Content = new MyUserControl()
    };

    window.ShowDialog();
}
132
user7116
Window window = new Window
            {
                Title = "My User Control Dialog",
                Content = new OpenDialog(),
                SizeToContent = SizeToContent.WidthAndHeight,
                ResizeMode = ResizeMode.NoResize
            };
            window.ShowDialog();

Cela a fonctionné comme une magie pour moi. Peut-il être fait sous forme de dialogue modal?


Ans: ShowDialog lui-même le faire comme boîte de dialogue modale .. ...

10
WpfBegnner

Pour autant que je sache, vous ne pouvez pas faire cela. Si vous souhaitez l'afficher dans une boîte de dialogue, c'est très bien, créez simplement une nouvelle fenêtre qui ne contient que votre UserControl et appelez ShowDialog () après avoir créé une instance de cette fenêtre.

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

Cependant, ceci est:

private void Button_Click(object sender, RoutedEventArgs e){
    new ContainerWindow().ShowDialog();
}
1
Mark Carpenter
namespace System.Window.Form
{
    public static class Ext
    {
        public static DialogResult ShowDialog(this UserControl @this, string title)
        {
            Window wind = new Window() { Title = title, Content = @this };
            return wind.ShowDialog();
        }
    }
}

Son utilisation peut être aussi simple que UserControlInstance.ShowDialog (). Une meilleure implémentation personnalisée serait d'étendre la classe Window et de la personnaliser en utilisant le concepteur et le code pour obtenir n'importe quelle fonctionnalité.

1
gwasterisk

Je sais que c'est pour .net 3.5, mais voici une solution viable pour .net 2.0

  MyUserControl myUserControl= new MyUserControl();

  Form window = new Form
  {
    Text = "My User Control",
    TopLevel = true,
    FormBorderStyle = FormBorderStyle.Fixed3D, //Disables user resizing
    MaximizeBox = false,
    MinimizeBox = false,
    ClientSize = myUserControl.Size //size the form to fit the content
  };

  window.Controls.Add(myUserControl);
  myUserControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
  window.ShowDialog();
0
Darrelk