How do you display a custom UserControl as a dialog?

Viewed 100656

How do you display a custom UserControl as a dialog in C#/WPF (.NET 3.5)?

7 Answers

Place it in a Window and call Window.ShowDialog. (Also, add references to: PresentationCore, WindowsBase and PresentationFramework if you have not already done so.)

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

        window.ShowDialog();
}

As far as I know you can't do that. If you want to show it in a dialog, that's perfectly fine, just create a new Window that only contains your UserControl, and call ShowDialog() after you create an instance of that Window.

EDIT: The UserControl class doesn't contain a method ShowDialog, so what you're trying to do is in fact not possible.

This, however, is:

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

I know this is for .net 3.5, but here is a workable solution for .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();

You can also use MaterialDesignThemes.Wpf (downloadable on NuGet, .NET 4.5+). Then you can simply do:

{
    var view = new YourUserControl();
    var result = await DialogHost.Show(view, "RootDialog", ClosingEventHandler);
}

private void ClosingEventHandler(object sender, DialogClosingEventArgs eventArgs)
{ }  //Handle Closing here
Related