Как пополнить cs файл скинами

Обновлено: 01.07.2024

В этом руководстве не рассказывается, как создавать скины, для этого есть несколько других замечательных руководств. Это руководство предназначено для тех, кто создал собственные скины для CS:GO в мастерской, а теперь хочет посмотреть, как они будут выглядеть в игре.

У вас должны быть установлены GCFScape и Notepad++ (Ссылки во введении).
Итак, прежде всего нам нужно найти правильный каталог: C:\Program Files\Steam \SteamApps\common\Counter-Strike Global Offensive\csgo

Вы должны увидеть здесь несколько разных папок, в том числе папку с названием «материалы». Переименуйте этот materials_BAK или как-то так. (Это делается только для того, чтобы сохранить резервную копию исходных файлов.)

Теперь идите дальше и найдите файл с именем "pak01_dir"

Откройте это с помощью GCFScape и скопируйте всю папку под названием «материалы». (Просто скопируйте его на рабочий стол или в другое место, где сможете найти.)

Теперь поместите скопированную папку "materials" в корневую папку: C:\Program Files\Steam\SteamApps\common\Counter-Strike Global Offensive\csgo

Теперь перейдите в C:\Programs Files\Steam\SteamApps\common\Counter-Strike Global Offensive\csgo\materials\models\weapons
Убедитесь, что все правильно. Это не \models\weapons, а материалы\модели\оружие!

Здесь вы увидите 2 папки: v_models и w_models.
v_model — это текстура вашего оружия размером 2048x2048.
w_model — это текстура вашего оружия размером 512 x 512.

v_model — это VTF-файл, который вы добавляете при отправке своего скина из мастерской. Чтобы создать файл 512x512, вам нужно импортировать ваш .TGA-файл в VTFEdit (полагаю, у вас есть эта программа, если вы умеете делать скины) и поставить галочку Clamp с настройками: Максимальная ширина и высота 512.

Теперь сохраните это. (Имя не имеет значения, мы все равно изменим его позже.)

Теперь откройте папку v_models и найдите нужное оружие. Бывший. папка AK-47 называется "rif_ak47" (Rifle_AK47).
Здесь вы увидите 3 файла. Скопируйте текстуру v_model (2048 x 2048) в эту папку.

Теперь измените имя файла на новое с тем же количеством символов, что и в оригинале. Бывший. оригинал здесь называется ak47. a-k-4-7 это 4 символа, поэтому новое имя также должно состоять из 4 символов. Я назову свою текстуру "ak48".

Теперь сделайте то же самое для w_model.

- Откройте папку w_models-folder
- Найдите нужную папку с оружием
- Скопируйте свою w_model-texture (512x512)
- Измените имя на что-то с тем же количеством символов, что и в оригинале. (Позже вам будет полезно, если это то же самое, что и v_model, например, "ak48")

Далее мы заставим CS:GO читать ваши текстуры вместо оригинала.

Для этого вернитесь в каталог: C:\Program Files\Steam\SteamApps\common\Counter-Strike Global Offensive\csgo
ВАЖНО: Теперь скопируйте файл < i>"pak01_dir" и вставьте его в ту же папку с именем вроде "pak01_dir_BAK". Это важно, потому что ваши файлы могут быть легко повреждены, когда вы их редактируете, а это означает, что вы не сможете играть в игру. Поэтому всегда сохраняйте резервную копию ваших файлов. Если вы получите сообщение об ошибке, просто перейдите в каталог и удалите "pak01_dir" и измените имя с "pak01_dir_BAK" обратно на "pak01_dir" еще раз, и теперь игра должна загружать исходные файлы и нормально работать.

Далее отредактируйте pak01_dir с помощью NotePad++.
Нажмите Ctrl+f, чтобы использовать инструмент «найти». Введите и найдите имя папки с желаемым оружием. Бывший. Я хочу протестировать свой AK-47, поэтому поищу имя папки, в которой он находился: "rif_ak47".

Сначала мы найдем BaseTexture для w_model. Измените имя исходной текстуры на новое имя вашей текстуры w_model. Бывший. замените часть, отмеченную красным (ak47), на "ak48".

Нажмите пару раз "Найти далее" в инструменте поиска, пока не найдете BaseTexture для v-модели.
Проделайте здесь то же самое, что и раньше. Измените имя исходной текстуры на имя вашей v-model-texture.

Нажмите «Сохранить», и все готово! :-)

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

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

sv_cheats 1 – активирует читы, необходимые для работы других команд.
Импульс 101 – даст вам мгновенные деньги, позволяющие купить желаемое оружие.
mp_buytime 999 – продлит время покупки.
cl_drawhud 0 — скроет HUD, что позволит вам делать более качественные скриншоты.
host_timescale 0,1 или меньше — замедлит время. Очень полезно для фотографирования ботов или при осмотре вашего оружия.

Создайте новый автономный сервер без ботов. Они будут только мешать вам.;-)
Используйте команды, которые я перечислил выше, и используйте Steam или Fraps, чтобы сделать снимок экрана.

Создайте новый автономный сервер с ботами и присоединитесь к зрителю. Используйте режим свободного полета и найдите бота со своим оружием. Используйте команды, перечисленные выше, и используйте Steam или Fraps, чтобы сделать снимок экрана.

Ваша текстура также включена в меню. Просто зайдите в свой инвентарь и осмотрите свое оружие.

При желании вы можете отредактировать скриншоты в Photoshop, чтобы размыть фон и изменить контрастность, чтобы сделать их четкими. :-)

Надеюсь, вам понравилось мое руководство, и оно помогло вам. Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях. :-)

Используйте Ctrl+F и введите в строке поиска "weapon_knife", чтобы попасть в этот раздел:
Замените обе строки скрипта в красном поле на выбранный вами нож. НЕ ЗАБУДЬТЕ изменить вторую строку кода с «v» на «w».

Вы можете сами найти свои скины и скины, которые хотите изменить, не знаете как?
Найдите кейс/коллекцию, из которой ваш скин или желаемый скин, в файле items_game и посмотрите в там. Например, если вы не знаете идентификатор скрипта для AWP-сетки для сафари, посмотрите, из какой он коллекции/кейса, либо по его описанию на рынке, либо поищите в Google.
Поскольку я знаю, что это из коллекции Lake, я могу теперь используйте мой раздел «Коллекция и случаи» руководства для идентификатора коллекции Lake, который называется set_lake. Теперь найдите это в файле, где я обнаружил, что AWP находится в разделе «[sp_mesh_tan]weapon_awp», который показывает скин внутри [] - sp_mesh_tan, так что теперь я знаю, какой ID скрипта скина мне нужен, теперь я могу найти его, чтобы получить это раздел сценариев.
Скажем, у меня есть Dragon Lore, который я хочу изменить на этот скин Safari Mesh, который у нас есть, поэтому я теперь ищу его точно так же, как «cu_medieval_dragon_awp», куда я вставляю скрипт Safari Mesh. раздел ниже.
Сохраните файл и запустите CSGO, если «Dragon Lore» по-прежнему является «Dragon Lore», но показывает «Safari Mesh» под ним, тогда это сработало, нажмите «проверить» или перейдите прямо в офлайн-игра, чтобы увидеть свою новую сверкающую сетку Safari!

Для начала я покажу вам, как я изменил свой AWP | Червячный бог (Прямо с завода) на Dragon Lore и Medusa, изменил Stattrak™ PP-Bizon | Кобальтовый полутон (Немного поношенное) в изумруд, рубин и сапфир и как я изменил свой Керамбит | Доплер от Фазы 2 до Сапфира и Мраморного выцветания. Вы НЕ МОЖЕТЕ изменить скин стандартного оружия!

А теперь результат:
Оригинал:
Результаты:

Взаимная смена скинов в основном такая же, как и обычная смена скинов, за исключением случаев, когда взаимная смена скинов с другого оружия, например, «Вой» на скин M4A1-S, не очень хорошо работает, как большинство из них, но есть некоторые из них. скины, которые работают довольно хорошо, такие как Dopplers, в основном Emerald, Ruby и Sapphire, но вы можете попробовать и другие.

Необходимо: нож со скином, ваниль нельзя использовать.
Смена скина ножа работает так же, как и другие, найдите скин, на который вы хотите сменить, и примените его скрипт к скину вашего текущего ножа. сценарий.

< бр />

У каждого есть представление о скине оружия, который он хотел бы видеть в CSGO, верно? Что ж… Вы действительно можете разработать и отправить свой собственный! Созданные скины оружия можно отправить в мастерскую Steam, чтобы получить шанс на добавление в игру, однако вы всегда можете использовать свои собственные скины оружия CSGO в частных офлайн-матчах столько, сколько захотите. Вот все, что вам нужно знать о том, как самостоятельно создать скин оружия в CSGO. Это немного трудоемкий процесс, но он того стоит, если вы что-то задумали.

Оглавление

Как создать скин оружия в CSGO — шаг за шагом

Шаг первый. Загрузите нужные файлы

Вы можете найти все необходимые файлы на странице Steam Workshop для CSGO. Однако есть несколько наборов файлов, на которые вам нужно обратить внимание. Файлы «.obj» относятся к 3D-модели оружия, а файлы «.tga» содержат UV-листы, необходимые для фактического внедрения текстуры в модель оружия. Вам понадобятся оба эти файла вместе с файлом «.txt». Не беспокойтесь о том, куда вы их положили, просто убедитесь, что сможете найти их позже.

Шаг второй. Откройте модель пистолета, подготовьте текстуру

Когда вы откроете соответствующий файл «.obj» для выбранного вами оружия, вы сможете начать добавлять свою собственную текстуру в 3D-модель оружия. Все они должны быть названы и относиться к любому оружию, для которого вы решили сделать скин в игре. На изображении ниже, например, Five-Seven.

Все, что вам нужно сделать, это следующее…

  • Откройте вкладку "3D-сцена" на правой панели.
  • Выберите «__PS_3D_Default» и «Удалить текстуру» на значке рядом с «Рассеивание»;
  • Выберите тот же значок и нажмите «Загрузить текстуру»;
  • Выберите UV-лист, соответствующий оружию, для которого вы создаете скин;
  • Выберите тот же значок и нажмите «Открыть текстуру». Это должно открыться в новой вкладке;

С этого момента все, что вы редактируете в 2D-текстуре, должно отражаться в 3D-модели на первой вкладке. Это та часть, где вы можете проявить творческий подход!

Шаг третий. Создайте свой скин

Все, что вам нужно сделать, это решить, что вы хотите надеть на скин для оружия. Для некоторых это легко. Для других это может быть довольно трудным процессом. Убедитесь, что вы также проверяете 3D-модель своего оружия. Если вы добавите какой-либо текст, будет очень тяжело узнать, что он перевернут на такой поздней стадии процесса.

Когда вы закончите, вам нужно сохранить это как файл TGA с расширением «.tga».

Шаг четвертый. Конвертируйте файл

К сожалению, файл «.tga» — это не то, что вам нужно в игре, поэтому вам нужно преобразовать его в файл VTF. Для этого все, что вам нужно сделать, это открыть VTFEdit и импортировать файл «.tga», над которым вы только что закончили работу. Отсюда вы сможете экспортировать файл как файл VTF в любое место. Это довольно простой шаг, учитывая все обстоятельства.

Шаг пятый. Проверка в игре

Теперь вы готовы испытать этого плохого мальчика в игре! Откройте этот таинственный файл «.txt» и замените «bullet_rain_m4» на путь к вашему файлу VTF. Неважно, как вы его назвали, главное, чтобы оно было правильным!

Теперь пришло время загрузить CSGO. Когда вы находитесь в игре, вам нужно открыть командную консоль и ввести «workshop_workbench». Вы можете открыть это, нажав клавишу слева от «1». Он должен выводить «`» при обычном нажатии и «¬» при нажатии SHIFT.

Создать скин CSGO

Вот как будет выглядеть верстак мастерской. / Кредит: Мастерская Steam

Затем вы выбираете «Custom Paint Job» в раскрывающемся меню в левом верхнем углу, и вы сможете легко найти свой файл VTF.

Шаг шестой. Отправьте, когда будете довольны

Если все выглядит хорошо и вы довольны созданным дизайном, вы можете нажать «Отправить» в правом нижнем углу, и откроется последний шаг этого процесса.

Все, что вам нужно сделать, это заполнить соответствующую информацию и вставить созданный файл «.tga» в раздел «Исходное изображение». Раньше это могло показаться сложным, но именно так вы создаете свой собственный скин оружия CSGO.


Hugz

3


Я делаю это для того, чтобы люди, которые хотели бы делать что-то, используя скины (например, /u/Gentleman_Cake в его предыдущем посте), могли найти их все (или, по крайней мере, я считаю, что это все из них.)

Вещи, которые вам понадобятся:

Программное обеспечение для редактирования изображений на ваш выбор, если вы планируете использовать текстуры кожи для чего-то вроде обоев рабочего стола. (например, Gimp, Photoshop и т. д.)

Приступим к самому уроку!

Откройте GCFScape и выберите Файл > Открыть.

Перейдите в каталог CS:GO внутри GCFScape. Должно быть примерно так: "C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo".

Найдите файл с именем pak01_dir.vpk (он должен быть внизу списка) и нажмите кнопку "Открыть".

После открытия выберите папку materials, щелкните ее правой кнопкой мыши и распакуйте в папку C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive. \csgo". Этот процесс может занять несколько минут в зависимости от скорости вашего компьютера.

По завершении распаковки перейдите в этот каталог. "C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\materials\models\weapons\paints" Вы можете указать это на панели вверху окно или перейдите туда вручную.

Внутри этих папок находятся файлы .vtf. Это тип файла, используемый игрой для хранения скинов. Вот где VTFEdit становится полезным.

Найдите нужный скин и откройте его в VTFEdit. (Не все скины имеют такое же имя, как и их файл, например, MP9 | Dart называется mp9_chevron.vtf)

Убедитесь, что это тот скин, который вы хотите использовать, а затем перейдите в раздел Файл > Экспорт, где вы можете выбрать предпочитаемый тип файла (.tga, .jpg, .jpg, .bmp). ) и сохраните его в нужном месте, например на рабочем столе.

Сделайте с ним что-нибудь классное!

После этого у меня не было проблем с текстурами в CS:GO. Если что-то случится с вашими файлами, вы можете проверить кеш игры, и если это не сработает, попробуйте переустановить.

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

Полное руководство по темам и обложкам WPF

В WPF мы определяем систему ресурсов пользовательского интерфейса (в основном в словарях ресурсов XAML), которая включает цвета, шаблоны, значки, стили и т. д. Иногда нам нужна возможность динамически изменять внешний вид нашего приложения, позволяя использовать различные темы или оболочки .

У нас могут быть общие ресурсы для всех тем и динамические ресурсы, основанные на текущей теме или обложке.

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

Термины оформления и оформления

Термины Theming и Skinning означают что-то очень конкретное в WPF. Под темами понимается тема Windows, такая как Aero или Luna. В каждой версии Windows (XP, Vista, Win 7) есть другая тема по умолчанию, в которой такие элементы управления, как кнопка или индикатор выполнения, выглядят по-разному. Возможно, вы захотите изменить свои собственные элементы управления в соответствии с текущей темой Windows. Или принудительно выберите определенную тему для своего приложения.

Под скиннингом понимается изменение внешнего вида вашего приложения в соответствии с пользовательскими настройками или определенной пользовательской логикой. Например, использовать разные цвета в зависимости от текущего клиента.

Тематика

WPF имеет встроенную систему поддержки тем:

Остальная часть статьи посвящена скиннингу, так как я думаю, что это более распространенный сценарий, а решения аналогичны решениям для тем.

Когда нам нужен скиннинг

Существует два распространенных сценария, когда нам требуется скиннинг.

  1. Если мы создаем приложение B2B, наши клиенты могут захотеть изменить брендинг для приложения. Поэтому, если мы создаем кассовое приложение для McDonald’s, они могут захотеть, чтобы цвета были желтым и красным McDonald’s.
  2. Для потребительского приложения мы можем предоставить пользователям возможность выбора индивидуального внешнего вида. Это могут быть разные цвета, разные стили управления и т. д.

Загрузка скина: скомпилированный, свободный, статический или динамический

Существуют разные способы загрузки скина:

  1. Скомпилированный и статический. Скомпилированный означает, что ресурсы XAML включены в вашу сборку. Под статическим я подразумеваю, что скин не может измениться во время выполнения. Потребуется перезапуск приложения. Это верно для нашего сценария B2B. Например, McDonald’s никогда не захочет менять свой скин на Burger King.
  2. Компилированный и динамический. Под динамическим я подразумеваю скин, который можно изменить во время выполнения. Однако, поскольку он скомпилирован, мы не можем «импортировать» пользовательские скины из-за пределов нашей сборки.
  3. Свободный — свободный относится к свободному XAML, где мы можем загружать ресурсы XAML из любого файла XAML. Например, если вы помните WinAmp, у него была довольно крутая система скинов, где вы могли загружать скины из Интернета.

Что выбрать?

Проще всего реализовать скомпилированную и статическую. Если требуется изменение скина во время выполнения, мы будем использовать Compiled и Dynamic. Использование любого свободного XAML должно быть нашим последним средством, поскольку оно подвержено ошибкам, имеет некоторые ограничения и имеет наихудшую производительность.

Скомпилированное и статическое оформление

У нас есть несколько способов достижения скомпилированного и статического скиннинга. У каждого есть свои плюсы и минусы.

  1. Используйте класс SkinResourceDictionary. (Также поддерживает Dynamic Skinning с некоторыми изменениями)
  2. Добавить объединенные словари в код (также поддерживает динамическое оформление)
  3. Единый словарь ресурсов для каждого скина, проанализированный и добавленный непосредственно в App.xaml (также поддерживает динамическое создание скинов)

Использование класса SkinResourceDictionary

Это действительно простой способ реализовать Skinning и использовать любую иерархию ресурсов XAML, которую мы хотим. (См. возможные проблемы с иерархией WPF XAML).

SkinResourceDictionary подобен обычному ResourceDictionary, за исключением того, что для каждого скина мы даем разные источники. Вот код:

Во-первых, нам нужно добавить класс SkinResourceDictionary:

App.Skin — это просто статическое свойство в App.xaml.cs.

Исходное значение свойства определяет скин приложения.

Затем мы используем SkinResourceDictionary так же, как и обычный словарь ресурсов. В App.xaml:

Вот и все, простая реализация скинов.


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

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

Компилированное и динамическое оформление

Как уже упоминалось, мы можем захотеть изменить наш скин во время выполнения.

Например, если пользователь перейдет в «Настройки -> Обложки», выберет «Темный», и весь пользовательский интерфейс приложения изменит внешний вид и цвета на темную обложку.

Проблема с динамической сменой скина заключается в том, что при замене всех наших ресурсов на новые «темные» ресурсы изменение ресурсов не будет применено немедленно. Элементы управления необходимо перезагрузить. Это предполагает, что мы используем StaticResource. При использовании DynamicResource элементы управления будут немедленно обновлены до нового внешнего вида. Однако использование DynamicResource сопряжено с некоторыми серьезными проблемами.

Давайте рассмотрим три подхода для достижения этой цели:

  1. Используйте SkinResourceDictionary и вызовите UpdateSource() при изменении скина
  2. Добавить объединенные словари в код
  3. Единый словарь ресурсов для каждой оболочки

1 -SkinResourceDictionary и вызовите UpdateSource() при изменении скина

Это очень похоже на предыдущий пример с SkinResourceDictionary. Поскольку нам нужно изменить скин во время выполнения, нам нужно динамически изменить источник в SkinResourceDictionary.

Нам нужно добавить новый метод ChangeSkin() в App.xaml.cs , который мы будем вызывать всякий раз, когда потребуется изменить обложку.
Он проходит по всем нашим объединенным словарям и вызывает их перезагрузку. Это необходимо даже для обычных словарей ресурсов (не SkinResourceDictionary ), потому что они могут использовать StaticResource, определенный в SkinResourceDictionary перед ним, и мы хотим, чтобы он изменился в соответствии с новой обложкой.

Вот оно. Это единственное изменение, необходимое для того, чтобы Dynamic Skinning работал с SkinResourceDictionary. Вот простой пример использования:

И результат:

RefreshNiceSquare() необходим, так как мы использовали StaticResource. Если элемент управления не перезагружен, новые ресурсы не будут применяться.

Есть одна вещь, которая здесь не работает, а именно: ресурсы, определенные в App.xaml (не в объединенном словаре), не будут меняться в соответствии с новой обложкой. Поэтому, если вы используете стиль, например, внутри которого StaticResource зависит от темы, он не будет обновляться при изменении скина. Однако, если этот стиль находится в ResourceDictionary в другом файле и на него есть ссылка в App.xaml MergedDictionaries, все работает нормально. Таким образом, просто переместив все стили из корня App.xaml в выделенный словарь ресурсов и поместив его последним, все будет работать. Другими словами, используйте App.xaml только для объединенных словарей.

2 – Добавить объединенные словари в код

Вместо того, чтобы добавлять наши словари ресурсов в XAML, мы можем добавить их и изменить в коде.

Давайте сделаем это. В App.xaml.cs:

App.xaml теперь должен быть пустым:

Вот оно. Мы в основном храним все наши словари ресурсов в коде и заменяем их, когда требуется изменение скина. Простота реализации и простота понимания.

  • Мы должны объявить наши объединенные словари в коде, а не в XAML, как задумал Бог.
  • При таком подходе дизайнер не работает. Чтобы дизайнер работал, мы можем добавить наши объединенные словари со скинами по умолчанию в App.xaml, создав дубликат. Однако, если в какой-то момент кто-то может добавить словарь ресурсов в код, но забудет добавить его в XAML, дизайнер потерпит неудачу или начнет лгать.
  • Как и в предыдущем подходе, при добавлении ресурсов в сам App.xaml они не будут обновляться при изменении темы оформления.

3 – Каждая оболочка с одним словарем ресурсов

Идея состоит в том, чтобы у каждой оболочки был один словарь ресурсов. Итак, если вы хотите, чтобы Blue Skin содержал BlueColors.xaml , BlueSizes,xaml и BlueStyles.xaml , тогда все они будут в словаре ресурсов с именем BlueSkin.xaml . Вот так:

Проблема в том, что мы не можем просто объединить BlueSkin.xaml с App.xaml из-за проблемы с порядком поиска ресурсов WPF. Если BlueStyles.xaml зависит от StaticResource в BlueColors.xaml, он не будет работать. Однако он будет работать, если BlueColors.xaml и BlueStyles.xaml были объединены непосредственно в App.xaml (без BlueSkin.xaml). Подробнее об этой проблеме здесь.

Еще одна вещь, которую мы могли бы захотеть, — это Общие ресурсы для всех скинов. Они могут зависеть от ресурсов темы и должны обновляться при изменении скина.

Давайте рассмотрим пример:

Чтобы все это работало, вот наш App.xaml.cs:

App.xaml должен быть пустым.

При таком подходе дизайнер не работает. Что мы можем сделать, так это скопировать содержимое некоторого скина и содержимое Shared.xaml в App.xaml, как бы объединив их вручную. Это должно заставить дизайнера работать. Только не делайте коммитов на систему управления версиями, иначе разработчики начнут полагаться на нее, а дизайнер со временем начнет лгать.

Краткий обзор

Мы рассмотрели несколько подходов к созданию каркаса оформления для нашего приложения WPF. Все они полагаются на компилируемый скин. Это означает, что файл XAML включен в решение.

Из всех показанных подходов я предпочитаю и рекомендую SkinResourceDictionary. Вроде самый чистый и к тому же единственный с дизайнером работающим из коробки. SkinResourceDictionary также будет работать, если вы хотите использовать другой словарь ресурсов для объединенных словарей UserControl (в отличие от всех примеров, которые мы видели с ресурсами области приложения в App.xaml)

Последний подход с одним словарем ресурсов для скина, на мой взгляд, также хорош.

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

Свободное создание скинов XAML

WPF дает нам возможность загружать и анализировать любой файл XAML с помощью класса XamlReader. Таким образом, мы можем проанализировать и создать экземпляр ResourceDictionary из любого файла на жестком диске, например:

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

Еще одна вещь, которую я не смог сделать, — это использовать MergedDictionary внутри свободного XAML-файла. Это вполне разумно, так как WPF пытается найти объединенный словарь ресурсов в сборке. Возможным решением будет ручной анализ файла XAML, поиск всех словарей ресурсов и использование XamlReader для их загрузки. Или мы можем просто не использовать MergedDictionaries и поместить все наши ресурсы в один файл.

В качестве примера я создал файл GreenSkin.xaml и поместил его в C:\Skins\GreenSkin.xaml

Читайте также: