Как вы отображаете пользовательский UserControl в виде диалога? - PullRequest
64 голосов
/ 11 августа 2009

Как отобразить пользовательский UserControl в качестве диалога в C # / WPF (.NET 3.5)?

Ответы [ 6 ]

127 голосов
/ 11 августа 2009

Поместите его в Окно и вызовите Window.ShowDialog .

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

    window.ShowDialog();
}
10 голосов
/ 30 августа 2013
Window window = new Window
            {
                Title = "My User Control Dialog",
                Content = new OpenDialog(),
                SizeToContent = SizeToContent.WidthAndHeight,
                ResizeMode = ResizeMode.NoResize
            };
            window.ShowDialog();

Сработало как волшебство для меня. Можно ли сделать это модальным диалогом?


Ответ: ShowDialog сам делает его как модальное диалоговое окно .. ...

1 голос
/ 06 апреля 2015
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();
        }
    }
}

Использование этого может быть так же просто, как UserControlInstance.ShowDialog (). Лучше настроить реализацию, расширив класс Window и настроив его с помощью конструктора и кода, чтобы получить любую функциональность.

1 голос
/ 11 августа 2009

Насколько я знаю, ты не можешь этого сделать. Если вы хотите показать его в диалоге, это прекрасно, просто создайте новое окно, которое содержит только ваш UserControl, и вызовите ShowDialog () после создания экземпляра этого окна.

EDIT: Класс UserControl не содержит метод ShowDialog, поэтому то, что вы пытаетесь сделать, на самом деле невозможно.

Это, однако, это:

private void Button_Click(object sender, RoutedEventArgs e){
    new ContainerWindow().ShowDialog();
}
0 голосов
/ 21 июня 2019

Я знаю, что это для .net 3.5, но вот работоспособное решение для .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 голосов
/ 13 октября 2010

Если ответ 'sixlettervariables' изменен следующим образом, он будет работать

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 ( );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...