Ответ 1
Что я использую с UriKind вроде
var resource = new ResourceDictionary
{
Source = new Uri("/myAssemblyName;component/Themes/generic.xaml",
UriKind.RelativeOrAbsolute)
};
НТН
Одна и та же строка кода в одной сборке работает для одного тестового прибора, но не другого. Вот строка кода:
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 является пользовательским элементом управления и как-то загружает ресурсы, когда создается экземпляр пользовательского элемента управления.
Что я использую с UriKind вроде
var resource = new ResourceDictionary
{
Source = new Uri("/myAssemblyName;component/Themes/generic.xaml",
UriKind.RelativeOrAbsolute)
};
НТН
@Принц Ашитака отвечает, как исправить ваш URI
Однако предпочтительным способом доступа к ResourceDictionary является то, что в XAML вы добавляете его как объединенный словарь
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ImageResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
то вы можете получить к нему доступ с помощью кода, используя TryFindResource(string Key)
из любого файла, за которым стоит файл