Как закрыть только дочерний элемент по нажатию кнопки в WPF

Я создал форму MDI, используя CodePlex DLL, я добавил пользовательский элемент управления WPF и открыл его как дочерний элемент с помощью ниже код:

MainMdiContainer.Children.Add(new MdiChild()
        {
            Title = " Employee Master",
            Height = 300,
            Width = 500,
            //Here CustomerMaster is the class that you have created for mainWindow.xaml user control.
            Content = new EmpMaster()
        });

Теперь я хочу закрыть только эту дочернюю форму (пользовательский элемент управления WPF) при нажатии кнопки. Я использовал следующий код при нажатии этой кнопки:

Window.GetWindow(this).Close();

Но этот код закрывает программу вместе со всеми открытыми окнами и родителем MDI. Как я могу закрыть только этот конкретный пользовательский элемент управления WPF при нажатии кнопки?


person Nadeem Shaikh    schedule 18.08.2015    source источник
comment
Что произойдет, если вы сделаете this.Close()?   -  person Sinatr    schedule 18.08.2015
comment
Не удалось получить this.close() в визуальной студии для WPF UserControl   -  person Nadeem Shaikh    schedule 18.08.2015


Ответы (2)


Я не знаю эту структуру, но подозреваю, что дочерний MDI не является Window. Когда вы вызываете Window.GetWindow(this).Close();, вы закрываете главное окно и, следовательно, завершаете приложение.

Попробуйте удалить MdiChild из MainMdiContainer:

var child = new MdiChild() { ... };
MainMdiContainer.Children.Add(child);
// Later
MainMdiContainer.Children.Remove(child);
person Sebastian Negraszus    schedule 18.08.2015
comment
Это .Net 4.0 Framework. Добавление дочернего элемента в контейнер MDI находится на странице MainWindow.xaml, и удаление этого дочернего элемента будет вызываться из дочерней формы, и в этой форме я не могу получить объект MainMdiContainer для удаления дочернего элемента. - person Nadeem Shaikh; 18.08.2015
comment
Я говорил не о .NET, а о внешней среде/библиотеке MDI. В любом случае. Почему вы не можете получить к нему доступ? Просто сделайте это публичным. Или предоставьте какой-нибудь публичный метод в главном окне, или событие в дочернем, или команду в модели представления. На самом деле это вопрос не о MDI, а о том, как заставить разные части пользовательского интерфейса общаться. - person Sebastian Negraszus; 18.08.2015
comment
Себастьян просит вас один раз пройти по ссылке в моем вопросе, вы получите полную информацию о структуре dll и методе реализации MDI. Это не winForm MDI, его страница WPF в качестве родительского MDI и пользовательский элемент управления WPF в качестве дочерней страницы. - person Nadeem Shaikh; 18.08.2015
comment
Пожалуйста, обратитесь к ссылке ниже, которую я точно реализовал: nofollow noreferrer">c-sharpcorner.com/UploadFile/8911c4/ - person Nadeem Shaikh; 18.08.2015

Я получил ответ, я назвал ниже строки кода при нажатии этой кнопки:

MainWindow mainWind = Application.Current.MainWindow as MainWindow;
mainWind.MainMdiContainer.Children.RemoveAt(0);
person Nadeem Shaikh    schedule 18.08.2015