| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > Автоматическое построение интерфейса по образцу |
| Автор: ercalote 23.1.2011, 20:50 |
| Возьмем для наглядности любой мессенджер, к примеру, qip. При начале диалога с новым юзером появляется новая вкладка с таким же интерфейсом, как и другие. Как мне представляется, хорошим дизайном было бы прописывание один раз всего этого интерфейса с последующим его подгружением на новые вкладки. Как такое поведение можно реализовать в WPF? Предполагается, что образец построен XAML-разметкой. |
| Автор: vikaz 23.1.2011, 21:59 |
| Один из вариантов использовать http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=RU-RU&k=k(SYSTEM.WINDOWS.CONTROLS.USERCONTROL);k(VS.XAMLEDITOR);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22)&rd=true. |
| Автор: ercalote 23.1.2011, 23:13 |
| UserControl в данной ситуации выглядит костылем |
| Автор: Bars1992 23.1.2011, 23:31 |
| Всмысле "костылем"? Я считаю это самый разумный ответ. Создаешь свой кантрл, и при необходимости создаешь новый екземпляр. Если говорить на примере аськи то я представляю себе это так: создаешь екземпляр твоего кантрала и в качестве контекста данных присоиденяешь обект который отвечает за отправку, визуализацию, и прием сообщений. Для работы собектом пишеш байдинг в кантроле к данному обекту. И Всё. Можно ище использовать ресурсы тоесть, запихнуть туда твое окно, а потом штамповать екземпляри. Но это довольно сложно так как я слышал что нужно использовать ElementFactory или чтото подобное. Вобщем лишний геморой. |
| Автор: Bars1992 24.1.2011, 09:45 | ||||||
| Сначала дам цитаты с книжки: Глава 3: "... Имея шаблон, нужно заполнить дерево отображения. Оно задается с помощью VisualTree объекта ControlTemplate, которое имеет тип FrameworkelementFactory. Шаблон можно пременять к нескольким елементам управления, но каждый елемент должен встречатся в дереве не более одного раза. Чтоб решить эту проблему, объект FrameworkElementFactory конструирует новый екземпляр дерева отображения дя каждого елемента, используещего данный шаблон ..." Глава 5: Сначала идет описание ситуации что если запихнуть в ресурсы объект типа кнопки, то в коде его можно использовать только один раз: Тут ошибки нету:
А тут будет:
И в конце написано: "... В главе 3 мы узнали о том, что делать, когда ресурс требуется использовать более одного раза,- прибегнуть к классу FrameworkElementFactory ..." Я так понял автор предлагает использовать ControlTemplate который каждый раз строит новое дерево отображения елементов, например вот:
Или я не так всё понял? |
| Автор: vikaz 24.1.2011, 09:59 |
| Не знаю даже, правильно или нет. Но я пока до такого не опускался. Вот тут приведен код с одной кнопкой, а что будет, если мне надо сформировать окно с 10-15 элементами, притом там будут присутствовать кнопки. Как я должен определить, какая кнопка вызвало определенное событие? |
| Автор: Bars1992 24.1.2011, 11:16 | ||
Вот:
Обрабатывать нажатие кнопки можно привязавшысь к текущему контексту данных. Ну например как в моем примере для каждого таба создавать свой обект переписки. А при нажатии кнопки отыскать этот обект переписки текущего таба и вызвать например метод SendMessage(). Но всё это настолько геморно |