Переместить UserControl из ContentControl в другой программно - PullRequest
6 голосов
/ 30 января 2012

В приложении WPF я хочу переместить UserControl из ContentControl в другой код:

 myContentControl2.Content = myUserControl;

в этом случае я получаю ошибку:
Указанный элемент уже является логическим дочерним элементом другого элемента. Сначала отключите его.

В описании класса ControlControl Я вижу метод RemoveVisualChild , но когда я пытаюсь использовать его в коде, я получаю Неизвестный метод Ошибка

myContentControl1.RemoveVisualChild(myUserControl);//here I get an "Unknown method" error

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

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Установите

myContentControl1.Content = null;

, чтобы удалить myUserControl из myContentControl1 перед установкой

myContentControl2.Content = myUserControl;

Кстати, не путайте логическое дерево с визуальным деревом.Получите дополнительную информацию в Деревьях в WPF в MSDN.

1 голос
/ 30 января 2012

В описании класса ControlControl я вижу метод RemoveVisualChild, но когда я пытаюсь использовать его в коде, я получаю Неизвестную ошибку метода

Это потому, что RemoveVisualChild и RemoveLogicalChildявляются защищенными методами, к которым вы не можете получить доступ непосредственно в вашем классе.Если вы хотите использовать этот метод, то создайте производный класс из ContentControl и предоставьте доступ к этим методам, используя некоторую открытую обертку для метода в этом классе.

Лучшим вариантом является удаление myUserControl из логического дерева myContentControl1перед добавлением логического дерева какого-то другого элемента управления.Для этого вы можете установить для свойства Content myContentControl1 что-то еще или null.

...