Вставить несколько иконок в WPF EXE - PullRequest
7 голосов
/ 02 декабря 2009

У меня есть сборка WPF, в которую я хотел бы встроить пять значков для разных типов файлов, связанных с моим приложением. Как я могу вставить эти значки в мой EXE-файл?

@ smoore @Groky @ChrisF, спасибо. К сожалению, это не то, что я спросил. Я вижу, что мой вопрос был довольно расплывчатым. Позвольте мне перефразировать вопрос:


У меня есть значки, скажем Application.ico, Document.ico и т. Д. В качестве ресурсов в моих проектах WPF. В большинстве случаев я получаю доступ к этим значкам со следующим:

<Image Source="/MyAssembly;component/Resources/Icons/Application.ico" />

Это работает каждый раз. Я знаю это.


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

C:\Program Files\MyApp\MyApp.exe,1

Как в том, как значки связаны с типами файлов в HKEY_CLASSES_ROOT.

AFAIK, я должен использовать файл ресурсов (.rc), скомпилировать и объединить его с моим EXE-файлом. Что-то вроде:

101 RT_ICON Application.ico
102 RT_ICON Document.ico
// etc...

Это правильный путь в WPF? Есть ли альтернатива, тем более что этот метод, похоже, приводит к стиранию версии сборки с моего AssemblyInfo.cs. Я все еще готов написать информацию о версии в ресурсе вместо информации о сборке.

Ответы [ 5 ]

4 голосов
/ 07 декабря 2009

Я нашел одно решение ! Это не идеально, но делает то, что я хочу! Поскольку я использовал очень длинные скандинавские ночи, чтобы найти решение, я чувствую, что должен поделиться им здесь.

Вот что я сделал:

1) Написал тупое консольное приложение C #.

class ResTest {
    static void Main() {
        System.Console.WriteLine("Hello World!");
    }
}

2) Сделал простой csc restest.cs, чтобы проверить работоспособность моего кода.

3) Открыл Блокнот и написал следующее в файле, который я назвал App.rc.

101 ICON "Application.ico"
102 ICON "Document.ico"
103 ICON "Help.ico"

4) Ран rc /v App.rc, Компилятор ресурсов . Появился новый файл App.res.

5) Reran csc но на этот раз:

csc /win32res:App.res restest.cs

6) restest.exe теперь имел значок с идентификатором 101, и я мог найти два других значка в Axialis IconWorkshop.


Теперь я заметил, что моя информация о сборке (версия, название продукта, бла-бла бла ) исчезла. Я погуглил VS_VERSION_INFO и пришел к статье MSDN о структуре VERSIONINFO, которая в файлах RC определяет необходимые мне атрибуты.

Я бы предпочел более «автоматизированный» метод, но я должен делать то, что могу, используя C # Express и Windows Vista SDK.

- Надеюсь, что вы можете использовать это ...

3 голосов
/ 02 февраля 2010
  1. Создать App.rc:

    101 ICON "Application.ico"
    102 ICON "Document.ico"
    103 ICON "Help.ico"
    
  2. Компиляция:

    rc App.rc
    
  3. Добавьте App.res в свой проект (оставьте None в качестве действия по сборке).
  4. Сложение.

Все сделано!

2 голосов
/ 10 февраля 2012

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

C:\path\to\InsertIcons.exe $(TargetPath) $(ProjectDir)icons

Дополнительное описание и файл для загрузки можно найти по адресу http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/

2 голосов
/ 02 декабря 2009

Свойства проекта -> Ресурсы -> Добавить ресурс -> Добавить новый значок / Добавить существующий файл (в зависимости от того, сделали ли вы этот значок или нет)

1 голос
/ 02 декабря 2009

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

Затем вы можете ссылаться на файлы из XAML, используя свойство Source. Например, файл Icon.png в каталоге «Ресурсы» будет загружен с помощью:

<Image Source="/Resources/Icon.png"/>

И чтобы загрузить файл из кода, который вы используете:

new BitmapImage(new Uri(@"pack://application:,,,/Resources/Icon.png"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...