2016-09-16 11 views
1

Так что я просто learned, что мы можем поместить WPF UserControl в окна Form с помощью ElementHost управления. Если этот элемент управления формой окон был удален, будет ли пользовательский элемент управления WPF тоже удален?Будет ли пользовательский элемент управления WPF удален, если он используется в форме Windows, которая будет удалена?

+0

Это же. Все объектно-ориентированные языки программирования тоже. Пользовательское управление WPF одноразовое. – ebattulga

+0

@ebattulga WPF UserControl по умолчанию не 'IDisposable' и не будет' Dispose'. Взгляните на это сообщение: [Правильная очистка пользовательских элементов WPF] (http://stackoverflow.com/questions/1550212/proper-cleanup-of-wpf-user-controls). Метод 'Dispose' элемента управления ElementHost проверяет, является ли' Child' 'IDisposable', а затем вызывает его метод' Dispose'. Поэтому, если вам нужно что-то «Dispose», вы должны реализовать интерфейс «IDisposable». –

ответ

2

Если ваш WPF UserControl равен IDisposable, то да, в противном случае нет.

В исходном коде для Dispose метода ElementHost класса, который размещен в WPF UserControl, вы можете увидеть это:

IDisposable child = this.Child as IDisposable; 
if (child != null) 
{ 
    child.Dispose(); 
} 

Что означает Child будет утилизировать, если это IDisposable.

Примечание

WPF не полагаться на IDisposable интерфейс для очистки ресурсов. Но так как UserControl будет использоваться в проекте Windows Forms в элементе управления ElementHost, который поддерживает шаблон IDisposable, вы можете положиться на шаблон IDisposable, если вам нужно выполнить очистку некоторых ресурсов. Но если это проект WPF, вы должны использовать механизмы WPF для очистки ресурсов.