同一个程序集中的同一行代码适用于一个测试夹具,但不适用于另一个。这是代码行:
var dic = new ResourceDictionary { Source = new Uri("pack://application:,,,/MyApp.Wpf;component/ImageResources.xaml") };
我在其他测试夹具中遇到的错误是System.UriFormatException:无效的URI:指定的端口无效。
uri字符串也适用于xaml。有没有更好的方法在代码中加载资源字典?
干杯,
Berryl
=== UPDATE ===
正如我在this posting中发现的那样,由于没有注册包方案,因此发生了无效端口,这可以通过以下代码完成:
if (!UriParser.IsKnownScheme("pack"))
UriParser.Register(new GenericUriParser(GenericUriParserOptions.GenericAuthority), "pack", -1);
我猜测能够使用pack方案加载字典而没有错误的测试工具是因为SUT是用户控件,并且在创建用户控件的实例时以某种方式加载资源。
答案 0 :(得分:27)
我使用的是UriKind,如
var resource = new ResourceDictionary
{
Source = new Uri("/myAssemblyName;component/Themes/generic.xaml",
UriKind.RelativeOrAbsolute)
};
HTH
答案 1 :(得分:1)
@Prince Ashitaka回答告诉你如何纠正你的URI
然而,访问ResourceDictionary的首选方法是在XAML中将其作为合并字典添加
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ImageResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
然后您可以使用文件
后面的任何代码中的TryFindResource(string Key)
通过代码访问它