Подтвердить что ты не робот

Доступ к ресурсному словарю в коде wpf

Одна и та же строка кода в одной сборке работает для одного тестового прибора, но не другого. Вот строка кода:

var dic = new ResourceDictionary { Source = new Uri("pack://application:,,,/MyApp.Wpf;component/ImageResources.xaml") };

Ошибка, которую я получаю в другом тестовом устройстве, - System.UriFormatException: Недопустимый URI: указанный неверный порт.

Строка uri также работает в xaml. Есть ли лучший способ загрузить словарь ресурсов в код?

Cheers,
Berryl

=== UPDATE ===

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

if (!UriParser.IsKnownScheme("pack"))
     UriParser.Register(new GenericUriParser(GenericUriParserOptions.GenericAuthority), "pack", -1);

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

4b9b3361

Ответ 1

Что я использую с UriKind вроде

var resource = new ResourceDictionary
{
    Source = new Uri("/myAssemblyName;component/Themes/generic.xaml",
                     UriKind.RelativeOrAbsolute)
};

НТН

Ответ 2

@Принц Ашитака отвечает, как исправить ваш URI

Однако предпочтительным способом доступа к ResourceDictionary является то, что в XAML вы добавляете его как объединенный словарь

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ImageResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

то вы можете получить к нему доступ с помощью кода, используя TryFindResource(string Key) из любого файла, за которым стоит файл