访问代码wpf中的资源字典

时间:2010-08-24 03:15:56

标签: wpf uri resourcedictionary

同一个程序集中的同一行代码适用于一个测试夹具,但不适用于另一个。这是代码行:

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是用户控件,并且在创建用户控件的实例时以某种方式加载资源。

2 个答案:

答案 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)通过代码访问它