Графический шаблон приложения .NET winforms - PullRequest
9 голосов
/ 23 февраля 2009

Я создал довольно необычное приложение winforms для своей компании. У нас был графический дизайнер, который создавал графический интерфейс, который было очень трудно реализовать, все графические кнопки, много слоистых фонов и логотипов, анимации и т. Д.

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

Проблема в том, что если они хотят 5 или 6 разных брендов, я бы поддержал 5 разных сборок (я действительно должен поддерживать 1 с шаблонами diff)

Проблема в том, что не так просто (насколько я знаю) поменять изображения в приложении winforms. У меня есть все графические ресурсы в одной папке, но как только каждый файл введен в соответствующий список изображений или контейнер в Visual Studio, единственный способ обновить его - это удалить его и заново добавить, изменив исходную папку. не вызывает обновления встроенного изображения. Это было бы невероятно утомительно для каждой сборки, должен быть более простой способ.

Add On:
Поэтому после некоторого дальнейшего изучения я склоняюсь к какому-то редактору файлов resx. Однако те, что я видел до сих пор, больше ориентированы на перевод строк на разные языки и либо очень слабы, либо вообще не могут редактировать двоичные ресурсы, такие как bitmaps / png. Хотя, если вы откроете файл resx в программе просмотра XML (я использую блокнот 2 с установленным .resx для подсветки синтаксиса xml), MS любезно расскажет вам, как именно компилируется каждый тип (в основном варианты base 64)

Ответы [ 5 ]

12 голосов
/ 23 февраля 2009

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

Вы можете использовать ResGen.exe и ResourceManager для загрузки файла внешних ресурсов, чтобы вы могли использовать 5 разных файлов «ресурсов», но при этом сохранить кодовую базу одинаковой.

Этот пост также может помочь ... http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b388c700-0e07-452b-a19e-ce02775f78a6/

Редактировать: Кстати, я добавлю комментарий, что если вы приложите немало усилий, подумайте о WPF ... Большинство из этих "графических" элементов может быть выполнено изначально особенно если это градиенты и прочее, не говоря уже о простых шаблонах.

0 голосов
/ 31 марта 2009

Сейчас уже слишком поздно, но WPF был бы лучшим выбором, чем WinForms, так как его легче обработать.

Однако посмотрите, что DevExpress делает для WinForms, поскольку их элементы управления имеют систему скининга. Нетрудно поменять местами элемент управления Winform DevExpress на стандартный элемент управления Winform.

0 голосов
/ 25 марта 2009

Если большинство ваших форм схожи (т. Е. Один и тот же логотип, одинаковые кнопки внизу и т. Д.), Вы можете использовать визуальное наследование в WinForms, чтобы определить набор «базовых форм», из которых ваши фактические формы наследуют.

Если вы разрабатываете набор «Базовых форм» для каждого из ваших брендов, каждый набор в отдельной сборке, в который вы можете включить необходимую работу для создания нового бренда, сокращается до создания нового набора базовых форм.

Надеюсь, это поможет

0 голосов
/ 25 марта 2009

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

0 голосов
/ 23 февраля 2009

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

...