Мой WPF UserControl не может найти ресурсы, когда я использую его с проектом, отличным от того, в который он был встроен - PullRequest
3 голосов
/ 06 марта 2020

Итак, я создал пользовательский элемент управления WPF как часть более крупного решения. Я создаю другое приложение, где этот пользовательский элемент управления будет работать хорошо. Я добавил ссылку на DLL из нового приложения, подключил ее и скомпилировал. Окно загружается, и я вижу изображение, которое говорит мне, что не может найти. После отображения главного окна и заполнения пользовательского элемента управления возникает исключение, говорящее ...

System.IO.IOException: «Не удается найти ресурс» resources / nosortnofilter.png '.'

Пользовательский элемент управления - это DataGrid с некоторыми добавленными расширениями. Столбец, который он бросил, был "id". Как вы можете видеть на изображении, красная стрелка показывает изображение nosortnofilter.png, отображаемое во всех столбцах. Так почему же оно вызывает это исключение?

Exception

Строка кода, которую он выдает, находится здесь.

If ImageName = "" Then ImageName = "NoSortNoFilter"
img.Source = New BitmapImage(New Uri("pack://application:,,,/Resources/" & ImageName & ".png"))

enter image description here

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

РЕДАКТИРОВАТЬ: Найдено решение . Это работает. Но он все еще не отвечает на вопросы, почему оригинальный URI в формате pack: // работал только с оригинальным решением.

img.Source = New BitmapImage(New Uri($"Resources/{ImageName}.png", UriKind.Relative))

РЕДАКТИРОВАТЬ: Спасибо rfmodulator за предоставленную мне правильную информацию URI для DLL.

img.Source = New BitmapImage(New Uri("pack://application:,,,/AdvancedSortFilterDataGrid;component/Resources/" & ImageName & ".png"))

1 Ответ

4 голосов
/ 06 марта 2020

Это URI ресурса в сборке приложения:

pack://application:,,,/Resources/[RESOURCENAME]

Чтобы получить ресурс в DLL, URI выглядит примерно так:

pack://application:,,,/[DLLNAME];component/Resources/[RESOURCENAME]

Подробнее см. Упаковать URI в WPF .

...