доступ к словарю ресурсов в коде wpf - PullRequest
16 голосов
/ 24 августа 2010

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

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

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

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

Cheers,
Berryl

=== ОБНОВЛЕНИЕ ===

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

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

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

Ответы [ 2 ]

27 голосов
/ 24 августа 2010

Я использую UriKind как

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

НТН

1 голос
/ 10 ноября 2016

@ В ответе принца Ашитака рассказывается, как исправить ваш URI

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

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

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

...