Векторные иконки в WPF — где взять и как использовать

На днях я задал себе вопрос — почему, собственно, я не использую в проектах WPF векторные иконки а до сих пор применяю растровые? И провел небольшое исследование на тему где же взять векторные иконки в формате XAML и каким образом подключить их к моему проекту.Как выяснилось, все не так просто как мне хотелось бы. Поиск бесплатных библиотек иконок в формате XAML не дал практически ничего. С другой стороны можно легко найти иконки в другом распространенном формате SVG. К примеру, много интересных иконок можно найти в Open Clipart. Там же можно скачать всю библиотеку картинок одним большим архивом. Как же конвертировать картинки в XAML? Решение нашлось у Daniel Cazzulino в его блоге. Daniel предлагает использовать утилиту-конвертер, которую он написал специально для решения задачи конвертации. Утилита позволяет конвертировать как отдельный файл так и все файлы в определенной папке. Использовать утилиту очень просто:

Svg2Xaml [file|folder]+

Кроме того доступна XAML версия библиотеки OpenClipart 0.18, которую Daniel получил при помощи использования своей утилиты. В результате работы утилиты мы получим файлы изображений с расширением XAML.

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

Создаем новый файл ресурсов (в моем случае AppIcons.xaml) и прописываем его в качестве глобального файла ресурсов в App.xaml

<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="AppIcons.xaml"/>
  </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Для каждой иконки добавляем в файл ресурсов ее описание, добавляя содержимое xaml файлов иконок

<ControlTemplate x:Key="MyIcon">
 <Viewbox Stretch="Uniform">
    <!-- содержимое XAML файла -->
 </Viewbox>
</ControlTemplate>

И используем иконки там, где это нужно. Например иконка для кнопки будет описана примерно так

<Button>
  <StackPanel Orientation="Horizontal">
    <ContentControl Template="{StaticResource MyIcon}" />
   <TextBlock Text="Текст на кнопке" />
  </StackPanel>
</Button>

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

Дополнительно про включение в проект векторных иконок можно почитать на сайте LearnWPF.com

Векторные иконки в WPF — где взять и как использовать: 7 комментариев

  1. Pavel

    А ещё на кодеплексе есть другой svg2xaml, позволяющий просто использовать svg как imagesource:
    <Image Source=»{svg2xaml:SvgImage test.svg}»/>

  2. Юрий

    А есть ли возможность использовать вектор за место значка приложения?

  3. Лёха

    Всё больше склоняюсь к тому, чтобы использовать специальные юникодовские символы вместо иконок. Может неказисто, зато предельно просто с точки зрения кода. Набор енумов сделать и будет счастье.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *