How do you display a custom UserControl as a dialog?

后端 未结 7 1502
孤街浪徒
孤街浪徒 2020-12-07 15:45

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

相关标签:
7条回答
  • 2020-12-07 15:55

    If the answer by 'sixlettervariables' is modified as so, it works

    private void button1_Click ( object sender, RoutedEventArgs e )                  
    {
        Window window = new Window
        {
            Title = "My User Control Dialog",
            Content = new UserControl ( ),
            Height = 200,  // just added to have a smaller control (Window)
            Width = 240
        };
    
        window.ShowDialog ( );
    }
    
    0 讨论(0)
  • 2020-12-07 15:59

    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();
    
    0 讨论(0)
  • 2020-12-07 16:00

    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();
    }
    
    0 讨论(0)
  • 2020-12-07 16:06

    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();
    }
    
    0 讨论(0)
  • 2020-12-07 16:10
    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();
            }
        }
    }
    

    The use of it maybe as simple as UserControlInstance.ShowDialog(). A better customized implementation would be by extending the Window class and customizing it using the the designer and code to get any functionality.

    0 讨论(0)
  • 2020-12-07 16:20

    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
    
    0 讨论(0)
提交回复
热议问题