Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WPF - element is already the logical child, не могу понять как отсоединить... 
:(
    Опции темы
Kefir
Дата 14.8.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



Привет всем. не знаю куда запостить. Это вопрос про ВПФ.

Есть TabControl. При нажатии на кнопке [ИКС] создаётся новый TabItem и в контент ему суётся контрол из плагина.
примерно выглядит так:
Код

        private void buttonRun_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            IPlugin selectedPlugin = (IPlugin)this.listBoxPlugins.SelectedItem;
            selectedPlugin.Reset();
            
            TabItem ti = new TabItem();
            ti.Style = (Style)this.Resources["SimpleTabItem"];

            ti.Tag = selectedPlugin.Name;
            ti.Header = selectedPlugin.Name;
            ti.Content = selectedPlugin.UIObject;

            this.tabControl.Items.Add(ti);
        }
        // при закрытии таба испольняется код:
        private void buttonCloseTab_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            this.tabControl.Items.Remove(this.tabControl.SelectedItem);
        }

вот. этот таб можно закрыть и снова нажать на кнопку [ИКС]. Так вот при втором нажатии мне выдают очень милый эксепшн, а точнее вот он:
Цитата

Specified element is already the logical child of another element. Disconnect it first.

ну я понял смысл - мол, ты уже присвоил selectedPlugin.UIObject другому контролу - пока не отсоеденишь - фиг тебе. так вот вопрос, собственно, простой - КАК мне его отсоединить? RemoveLogicalChild - только у главного класса окна MainWindow (даже его попробовал поюзать, правда без надежды). Пробовал ставить контент табитема в null - тоже никак. Что делать-то?
PM MAIL WWW Skype   Вверх
ZMaximI
Дата 14.8.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 18.5.2004
Где: Украина, г. Харьк ов

Репутация: нет
Всего: -1



А Dispose() не пробовал ?


--------------------
<удалено администрацией форума>
PM MAIL WWW ICQ   Вверх
Kefir
Дата 14.8.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



я бы с радостью, только нету Dispose().
PM MAIL WWW Skype   Вверх
Exception
Дата 14.8.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Попробуй
Код
this.tabControl.RemoveLogicalChild (this.tabControl.Items[0]);


Давно не видел, чтобы на форуме постили красивый код smile . И даже к именам переменных и членов не придерёшься smile
PM   Вверх
Kefir
Дата 14.8.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



Exception, видишь ли, проблема в том, что RemoveLogicalChild - protected метод, полученный от предка FrameworkElement, соответственно фигушки я его заюзаю у табконтрола. У моего виндоу этот метод можно юзать только постольку поскольку я его наследую (и где-то там в его предках есть этот самый FrameworkElement).

PS спасибо за комплимент. приятно  smile 

PM MAIL WWW Skype   Вверх
Idsa
Дата 15.8.2007, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Kefir, Гугл вот что советует:
Цитата

Rather than using this.RemoveLogicalChild try using the parent element of the selected element.



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Kefir
Дата 15.8.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 2
Всего: 87



Idsa, ой, видел я эту тему где-то на форуме когда сам гуглил. и фразу эту видел. я вообще так понял что там посоветовали пользовать RemoveLogicalChild не у самого окна, а у парента. у меня парент TabItem. И заюзать RemoveLogicalChild у него я не могу по причинам, приведённым в моём предидущем посте:

Цитата(Kefir @  14.8.2007,  23:07 Найти цитируемый пост)
видишь ли, проблема в том, что RemoveLogicalChild - protected метод, полученный от предка FrameworkElement, соответственно фигушки я его заюзаю у табконтрола. У моего виндоу этот метод можно юзать только постольку поскольку я его наследую (и где-то там в его предках есть этот самый FrameworkElement).


PM MAIL WWW Skype   Вверх
Exception
Дата 15.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Я тоже, когда гуглил, попал на этот потс, потому и посоветовал. Не заметил, что этот мембер protected.
Попробуй заюзать метод RemoveAt (index). По крайней мере, во всех найденных мной примерах используется именно он.
PM   Вверх
Void
Дата 15.8.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Могу предложить маленький трюк. Класть UIObject не непосредственно в TabItem, а на какую-нибудь разновидность Panel, предварительно в этот TabItem вложенную. И при удалении делать Children.Clear(), при этом наш контрол гарантированно отцепляется от родителей. Получается жуть вроде:
Код
((Panel)((TabItem)tabs.SelectedItem).Content).Children.Clear();

Но ничего лучше в голову не пришло.



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.