[WPF штук 200 окон... генерировать?
От: squid  
Дата: 05.05.11 15:09
Оценка:
Привет

Начинаем WPF приложение.

В нем будет куча окон, и это не просто типа окошки с разными гридами, там разные контролы могут быть, окна действительно разные. Но при этом схожи, в основе таб контрол, два таба одинаковы, остальные различаются. В табах отображаются настройки вские... Поэтому на форме кнопки ОК и Cancel, она либо запишет обновленную инфу, либо просто закроется. Почти никаких действий.


Да, можно их ручами написать все. Но, если понадобится стиль приложения изменить, иконки к каким-то пунктам добавить, даже одинаковые... И тут мы можем дружно застрелиться, т.к. на любую мелочь уйдет куча времени.

Простой вопрос — как их можно сгенерировать наиболее разумным способом? Или делать простой список контролов и т.д. в XML, по нему делать XAML а его через XamlReader подгружать?

Я даже примерно не представляю как это делается.

Сорри за путанность некоторую.
avalon 1.0rc3 rev 366, zlib 1.2.3
Re: [WPF штук 200 окон... генерировать?
От: DmitryMS  
Дата: 05.05.11 16:07
Оценка: +1
Runtime генерацию не рассматриваете? Возможно, будет проще строить динамические окна и навешивать на них украшения (иконки, стили) чем хранить несколько мегабайт компилированного XAML'a.
Re[2]: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 05.05.11 16:16
Оценка:
Здравствуйте, DmitryMS, Вы писали:

DMS> Runtime генерацию не рассматриваете? Возможно, будет проще строить динамические окна и навешивать на них украшения (иконки, стили) чем хранить несколько мегабайт компилированного XAML'a.


ну я о том и говорю... но как и из чего...
avalon 1.0rc3 rev 366, zlib 1.2.3
Re: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 05.05.11 16:19
Оценка:
Здравствуйте, squid, Вы писали:

s> Я даже примерно не представляю как это делается.


Еще есть мысль как в opera:about сделать Вместо кучи табов...
avalon 1.0rc3 rev 366, zlib 1.2.3
Re[3]: [WPF штук 200 окон... генерировать?
От: bober_maniac Россия http://bober-maniac.livejournal.com/
Дата: 05.05.11 16:35
Оценка:
Здравствуйте, squid, Вы писали:

S>Здравствуйте, DmitryMS, Вы писали:


DMS>> Runtime генерацию не рассматриваете? Возможно, будет проще строить динамические окна и навешивать на них украшения (иконки, стили) чем хранить несколько мегабайт компилированного XAML'a.


S>ну я о том и говорю... но как и из чего...


В коде. Все то, что вы задаете в XAML — можно написать тупо императивным кодом.
Re[4]: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 05.05.11 16:40
Оценка:
Здравствуйте, bober_maniac, Вы писали:

b> DMS>> Runtime генерацию не рассматриваете? Возможно, будет проще строить динамические окна и навешивать на них украшения (иконки, стили) чем хранить несколько мегабайт компилированного XAML'a.


b> S>ну я о том и говорю... но как и из чего...


b> В коде. Все то, что вы задаете в XAML — можно написать тупо императивным кодом.


Неее... Это криво и не удобно... И никакой гибкости не вижу.
avalon 1.0rc3 rev 366, zlib 1.2.3
Re: [WPF штук 200 окон... генерировать?
От: olegkr  
Дата: 05.05.11 16:53
Оценка:
Здравствуйте, squid, Вы писали:

S>Простой вопрос — как их можно сгенерировать наиболее разумным способом? Или делать простой список контролов и т.д. в XML, по нему делать XAML а его через XamlReader подгружать?

1) Вынести как можно больше всего в отдельный stylesheet
2) Генерации XAML из XML на мой взгляд смысла особого не имеет, скорее всего в конечном итоге XML будет напоминать конечный XAML, если не объемистей. Но вообще все сильно зависит от того, насколько единообразен интерфейс.
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Re: [WPF штук 200 окон... генерировать?
От: Codechanger Россия  
Дата: 06.05.11 07:36
Оценка: +2
Здравствуйте, squid, Вы писали:

S>Привет


S>Начинаем WPF приложение.


S>В нем будет куча окон, и это не просто типа окошки с разными гридами, там разные контролы могут быть, окна действительно разные. Но при этом схожи, в основе таб контрол, два таба одинаковы, остальные различаются. В табах отображаются настройки вские... Поэтому на форме кнопки ОК и Cancel, она либо запишет обновленную инфу, либо просто закроется. Почти никаких действий.



S>Да, можно их ручами написать все. Но, если понадобится стиль приложения изменить, иконки к каким-то пунктам добавить, даже одинаковые... И тут мы можем дружно застрелиться, т.к. на любую мелочь уйдет куча времени.


S>Простой вопрос — как их можно сгенерировать наиболее разумным способом? Или делать простой список контролов и т.д. в XML, по нему делать XAML а его через XamlReader подгружать?


S>Я даже примерно не представляю как это делается.


S>Сорри за путанность некоторую.


Эммм... а что мешает сделать один темплейт окна, и в нем отображать ViewModels нужные?
Re[3]: [WPF штук 200 окон... генерировать?
От: DmitryMS  
Дата: 06.05.11 08:30
Оценка: -1
судя по вашим постам, вы никогда не занимались практичеким программированием. купите книжку, а лучше устройтесь младшим разработчиком в софтверную компанию. программирование есть процесс творческий до определенной степени вам никто не напишет пошаговую инструкцию здесь.
Re[2]: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 06.05.11 15:25
Оценка:
Здравствуйте, Codechanger, Вы писали:

C> Эммм... а что мешает сделать один темплейт окна, и в нем отображать ViewModels нужные?


ну да... но если понадобится внести изменения в интерфейс вроде "а вот тут мы добавим иконку с вопросиком для помощи для всех TextBox и ComboBox" — все равно ведь придется каждую менять? или я не совсем вас понимаю.
avalon 1.0rc3 rev 366, zlib 1.2.3
Re[4]: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 06.05.11 15:25
Оценка:
Здравствуйте, DmitryMS, Вы писали:

DMS> судя по вашим постам, вы никогда не занимались практичеким программированием. купите книжку, а лучше устройтесь младшим разработчиком в софтверную компанию. программирование есть процесс творческий до определенной степени вам никто не напишет пошаговую инструкцию здесь.


спасибо за ваш бессмысленный ответ
avalon 1.0rc3 rev 366, zlib 1.2.3
Re[3]: [WPF штук 200 окон... генерировать?
От: Ziaw Россия  
Дата: 15.05.11 06:15
Оценка:
Здравствуйте, squid, Вы писали:

C>> Эммм... а что мешает сделать один темплейт окна, и в нем отображать ViewModels нужные?


S>ну да... но если понадобится внести изменения в интерфейс вроде "а вот тут мы добавим иконку с вопросиком для помощи для всех TextBox и ComboBox" — все равно ведь придется каждую менять? или я не совсем вас понимаю.


Ага, а еще придется к каждой такой иконке привязывать урл хелпа. Почти наверняка придется документацию выборочно править. Вобщем экономия на непосредственной вставке самой иконки будет несущественная.
Re[4]: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 15.05.11 09:03
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z> Ага, а еще придется к каждой такой иконке привязывать урл хелпа. Почти наверняка придется документацию выборочно править. Вобщем экономия на непосредственной вставке самой иконки будет несущественная.


Да нет, это можно просто хинтом сделать.

А вообще я решил сделать как в Opera.

В WPF реализовано через свой контрол для каждой линии настроек в диалоге, будь то простой контрол типа checkbox или что-то "сложное" вроде списка файлов с диалогами добавления и т.д. Все эти контролы просто ложаться в StackPanel в итоге. Ну или несколько. А в итоге при создании окна выбираются необходимые StackPanel со всем что нужно. Очень просто выходит. При это скажем в случае чего обновляем маленький UserControl линии настроек, скажем контекстное меню особое к Edit вчера прикрутил. И теперь оно во всех диалогах. Вобщем, мне этот путь подошел. Не знаю правда, одобрит ли его кто
avalon 1.0rc3 rev 419, zlib 1.2.3
Re: [WPF штук 200 окон... генерировать?
От: matumba  
Дата: 15.05.11 09:24
Оценка:
Здравствуйте, squid, Вы писали:

S>Простой вопрос — как их можно сгенерировать наиболее разумным способом?


Зависит от глубины тюнинга. Я начал с тупого Перл-парсера C# исходников (по строке на проперть, в комментах к которым делал доп. настройку). Сейчас задачи разрослись так, что хорошо бы уже перейти на атрибуты пропертей, которые парсить уже C#-овым кодом. Но атрибуты вначале были неразумны ввиду их разнообразия и захламления кода (комменты были намного короче). Вот вам мои грабли — решайте
Re[2]: [WPF штук 200 окон... генерировать?
От: matumba  
Дата: 15.05.11 09:47
Оценка:
Здравствуйте, matumba, Вы писали:

M>Я начал с тупого Перл-парсера C# исходников


Да, извиняюсь, если не догадались уже: генерировал статический XAML, т.к. его "динамические" возможности ущербные. А делать всё из кода неудобно — XAML для этого не приспособлен вообще.
Если интересно, вот схема апдейта: захотели, скажем, на всех кнопках иконку. Берём сгенерированный файл, правим его копию в _нормальном_дизайнере_, находим отличия с исходным (их м.б. много) и вставляем отличия в шаблон. Перегенерируем файлы -> profit.

Как вариант (если у вас есть пара "форм-извращенцев" — которым нужен доп. код) можно держать более одного шаблона и вставлять в них общий для всех код.
Re[5]: [WPF штук 200 окон... генерировать?
От: matumba  
Дата: 15.05.11 09:52
Оценка:
Здравствуйте, squid, Вы писали:

S>Все эти контролы просто ложаться в StackPanel в итоге.


Некузяво. Наилучшим дизайном считается столбец лэйблов, выравненных вправо, после которых идёт столбец редакторов, выравленный влево, т.к. левая и правая часть прижаты к центральной оси. Лучший лэйаут для этого — Grid, но для него придётся повозиться с номерами строк (что не так и страшно).
Re[6]: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 15.05.11 11:01
Оценка:
Здравствуйте, matumba, Вы писали:

m> Некузяво. Наилучшим дизайном считается столбец лэйблов, выравненных вправо, после которых идёт столбец редакторов, выравленный влево, т.к. левая и правая часть прижаты к центральной оси. Лучший лэйаут для этого — Grid, но для него придётся повозиться с номерами строк (что не так и страшно).


Ровнять можно как угодно, внутри UserControl ведь оно идет как-бы. Одна линия — UserControl.

А они ровненько лежат в StackPanel.

В Grid тогда отдельно бы Columns/Rows для выравнивания и все такое) И вместо одного контрола — куча. В случае Edit — еще и куча кода для диалогов выбора файла/каталога и т.д. А так — бросил на формочку — и всё. Т.е. пр усложнении твой подход похуже становится.
avalon 1.0rc3 rev 419, zlib 1.2.3
Re[7]: [WPF штук 200 окон... генерировать?
От: matumba  
Дата: 17.05.11 19:29
Оценка:
Здравствуйте, squid, Вы писали:

S>Ровнять можно как угодно, внутри UserControl ведь оно....


Вот именно, что внутри. А теперь попробуй выровнять их так, чтобы все метки правой границей были на одной линии.
Re[8]: [WPF штук 200 окон... генерировать?
От: squid  
Дата: 17.05.11 20:13
Оценка:
Здравствуйте, matumba, Вы писали:

m> Вот именно, что внутри. А теперь попробуй выровнять их так, чтобы все метки правой границей были на одной линии.


Я вообще не знаю кто так их ровняет, но не мы. Grid.Columns и HorizontalAlign достаточно для этого? Если да то какие проблемы?
avalon 1.0rc3 rev 419, zlib 1.2.3
Re: [WPF штук 200 окон... генерировать?
От: Аноним  
Дата: 25.05.11 14:26
Оценка:
Здравствуйте, squid, Вы писали:

S>Привет


S>Начинаем WPF приложение.


S>В нем будет куча окон, и это не просто типа окошки с разными гридами, там разные контролы могут быть, окна действительно разные. Но при этом схожи, в основе таб контрол, два таба одинаковы, остальные различаются. В табах отображаются настройки вские... Поэтому на форме кнопки ОК и Cancel, она либо запишет обновленную инфу, либо просто закроется. Почти никаких действий.



S>Да, можно их ручами написать все. Но, если понадобится стиль приложения изменить, иконки к каким-то пунктам добавить, даже одинаковые... И тут мы можем дружно застрелиться, т.к. на любую мелочь уйдет куча времени.


S>Простой вопрос — как их можно сгенерировать наиболее разумным способом? Или делать простой список контролов и т.д. в XML, по нему делать XAML а его через XamlReader подгружать?


S>Я даже примерно не представляю как это делается.


S>Сорри за путанность некоторую.


Ресурсы + стили. Стили можно опредилить как для одной например кнопки так и сразу для всех кнопок или любого элемента.
Это — как отправная точка
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.