доступ словарь ресурсов в код в WPF

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

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

ошибки я вам в другой тестовая система.UriFormatException: недопустимый URI: указан недопустимый порт.

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

спасибо,
Berryl

= = = UPDATE ===

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

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

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

2 ответов


то, что я использую с UriKind, как

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

HTH


@Prince Ashitaka ответ расскажет вам, как исправить ваш URI

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

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

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