Графический шаблон приложения .NET winforms

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

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

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

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

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

Ответов (5)

Решение

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

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

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

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

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

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

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

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

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

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

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