|
Использование Frame
|
|||
---|---|---|---|
#18+
Привет! Вопрос по разработке UI на WPF. У меня типичная задача: в зависимости от нажимаемых кнопок (расположенных сверху в ряд) нужно менять содержимое рабочей области (т.е. того, что ниже). Есть 4 известных мне варианта, как это сделать: 1. Накидать ВСЕ контролы на окно, хайдить все ненужные, показывать нужные- крайне неудобно, часто контролы занимают одно и то же место. 2. Положить на окно tabControl, и раскидать все контролы по его вкладкам, потом показывать нужную вкладку. Хорошо, когда переключение и так задумано как вкладки - но это не всегда так! Я понимаю, что программно можно спрятать сами хедеры вкладок, и никто даже не поймет, что это tabControl. Но это неудобно на стадии дизайна. Вобщем, тоже не комильфо. 3. Сделать каждый набор контролов как один userControl, кинуть их все на окно, показывать нужный, остальным hide - похож на в.1, аналогичные неудобства. И логически не совсем верно: это все-таки не user-контролы, а группы контролов на разные ситуации. 4. Положить на окно Frame, сделать к нему нужное количество Page, и подгружать их. По-моему самый удобный вариант! НО есть проблемы: 1. Я что-то не пойму толком: эти Frame+Page принято использовать только для web'а, silverlit'а и т.п., а для описанной задачи их используют?? 2. Появляется дурацкая панель навигации. Ладно, отключил в свойствах. А вот звуковой щелчок при переходе убрать никак не могу!!! 3. Не могу растянуть страницу. Т.е. фрейм привязан ко всем 4 сторонам, растягивается вместе с основным окном, а страница внутри фрейма - отображается в своем оргинальном размере (там просто грид, без фиксированного размера). Как заставить ее растягиваться внутри фрейма? спасибо заранее. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2011, 22:13 |
|
Использование Frame
|
|||
---|---|---|---|
#18+
И главный вопрос: как в Page можно передать какие-то данные из основного окна (например, ссылку на объект класса)? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2011, 23:18 |
|
Использование Frame
|
|||
---|---|---|---|
#18+
ДокторКТОИ главный вопрос: как в Page можно передать какие-то данные из основного окна (например, ссылку на объект класса)? В UI ничего передавать не нужно. UI сам должен тянуть данные из источника. К источнику можно привязать несколько элементов пользовательского интерфейса. Для оповещения об изменении данных в источнике данных можно сделать с помощью интерфейса INotifyPropertyChanged. И да, про MVVM/MVC почитайте хотя бы поверхностно, что ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 01:43 |
|
Использование Frame
|
|||
---|---|---|---|
#18+
Начинать изобретать свои велосипеды с самого начала - это не то, что доктор прописал. Самый простой способ - показывать usercontrol'ы в ContentControl. Чтобы с этим не было головной боли нужна таблетка - сервис навигации. Варианты борьбы с этим можно посмотреть в готовых решениях(Prism,Caliburn,etc) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 08:00 |
|
Использование Frame
|
|||
---|---|---|---|
#18+
Верблюд, Странно, почему UI должен сам тянуть? Вот в MVP например: есть View (в нашем случае - страничка), он реализует интерфейс IView, под которым его знает Presenter, и этот самый Presenter инициирует обновление View (если изменилась Model). В любом случае непонятно, как в Page передать ХОТЬ ЧТО-ТО) Реализовать в странице интерфейс я могу, но как получить ссылку на экземпляр страницы? Если я создаю обычное модальное окно, то через конструктор класса могу при создании передать все, что надо, и в том числе ссылку на объект, реализовавший INotifyPropertyChanged чтобы в самом окне его забиндить. Но как в Page можно что-то передать, в т.ч. источник данных, если оно создается просто вот так: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 08:35 |
|
Использование Frame
|
|||
---|---|---|---|
#18+
ДокторКТОИ главный вопрос: как в Page можно передать какие-то данные из основного окна (например, ссылку на объект класса)? у Frame есть свойство ExtraData Код: plaintext 1.
можно передать любой объект. Как вариант, можно из любого места получить доступ к главному окну. Например: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 09:48 |
|
Использование Frame
|
|||
---|---|---|---|
#18+
LxTLT, о, спасибо! Первый вариант больше понравился (хотя передавать через object как-то устаревше, да что поделать). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2011, 10:04 |
|
|
start [/forum/search_topic.php?author=%D0%9A%D0%B0%D1%82%D0%B0%D0%B9%D0%BA%D0%B8%D0%BD+%D0%9F%D0%B0%D0%B2%D0%B5%D0%BB&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 730ms |
total: | 884ms |
0 / 0 |