Как отобразить пользовательский элемент управления UserControl в виде диалогового окна?


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

5 57

5 ответов:

поместите его в окно и звонок

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

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


Ans: ShowDialog он сам сделать это как модальный диалог.. ...

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

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

это, однако, является:

private void Button_Click(object sender, RoutedEventArgs e){
    new ContainerWindow().ShowDialog();
}
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 и его настройка с помощью конструктора и кода для получения любой функциональности.

Если ответ '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 ( );
}