![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
ercalote |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 23.1.2011 Репутация: нет Всего: нет |
Возьмем для наглядности любой мессенджер, к примеру, qip.
При начале диалога с новым юзером появляется новая вкладка с таким же интерфейсом, как и другие. Как мне представляется, хорошим дизайном было бы прописывание один раз всего этого интерфейса с последующим его подгружением на новые вкладки. Как такое поведение можно реализовать в WPF? Предполагается, что образец построен XAML-разметкой. |
|||
|
||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Один из вариантов использовать UserControl.
Это сообщение отредактировал(а) vikaz - 23.1.2011, 22:15 -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
ercalote |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 23.1.2011 Репутация: нет Всего: нет |
UserControl в данной ситуации выглядит костылем
![]() |
|||
|
||||
Bars1992 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 12.1.2011 Репутация: нет Всего: нет |
Всмысле "костылем"? Я считаю это самый разумный ответ. Создаешь свой кантрл, и при необходимости создаешь новый екземпляр. Если говорить на примере аськи то я представляю себе это так:
создаешь екземпляр твоего кантрала и в качестве контекста данных присоиденяешь обект который отвечает за отправку, визуализацию, и прием сообщений. Для работы собектом пишеш байдинг в кантроле к данному обекту. И Всё. Можно ище использовать ресурсы тоесть, запихнуть туда твое окно, а потом штамповать екземпляри. Но это довольно сложно так как я слышал что нужно использовать ElementFactory или чтото подобное. Вобщем лишний геморой. |
|||
|
||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Если Вам не сложно, могли бы Вы разъяснить, почему UserControl является "костылем"? Похоже Вы знаете то, что не знают все остальные. Поделитесь своим драгоценным опытом..... ![]() ![]() -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
Bars1992 |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 12.1.2011 Репутация: нет Всего: нет |
Сначала дам цитаты с книжки:
Глава 3: "... Имея шаблон, нужно заполнить дерево отображения. Оно задается с помощью VisualTree объекта ControlTemplate, которое имеет тип FrameworkelementFactory. Шаблон можно пременять к нескольким елементам управления, но каждый елемент должен встречатся в дереве не более одного раза. Чтоб решить эту проблему, объект FrameworkElementFactory конструирует новый екземпляр дерева отображения дя каждого елемента, используещего данный шаблон ..." Глава 5: Сначала идет описание ситуации что если запихнуть в ресурсы объект типа кнопки, то в коде его можно использовать только один раз: Тут ошибки нету:
А тут будет:
И в конце написано: "... В главе 3 мы узнали о том, что делать, когда ресурс требуется использовать более одного раза,- прибегнуть к классу FrameworkElementFactory ..." Я так понял автор предлагает использовать ControlTemplate который каждый раз строит новое дерево отображения елементов, например вот:
Или я не так всё понял? Это сообщение отредактировал(а) Bars1992 - 24.1.2011, 09:55 |
||||||
|
|||||||
vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Не знаю даже, правильно или нет. Но я пока до такого не опускался. Вот тут приведен код с одной кнопкой, а что будет, если мне надо сформировать окно с 10-15 элементами, притом там будут присутствовать кнопки. Как я должен определить, какая кнопка вызвало определенное событие?
-------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
Bars1992 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 12.1.2011 Репутация: нет Всего: нет |
Вот:
Обрабатывать нажатие кнопки можно привязавшысь к текущему контексту данных. Ну например как в моем примере для каждого таба создавать свой обект переписки. А при нажатии кнопки отыскать этот обект переписки текущего таба и вызвать например метод SendMessage(). Но всё это настолько геморно ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |