在WPF中访问资源字典的代码

19

同样的一行代码在同样的汇编中能够通过一个测试夹具但是没法通过另一个。这里是那一行代码:

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

在另一个测试装置中出现的错误是System.UriFormatException:Invalid URI:Invalid port specified。

这个URI字符串在XAML中也可以使用。是否有更好的方法在代码中加载资源字典?

谢谢,
Berryl

=== 更新 ===

如我在这篇文章中发现的那样,无效端口是因为未注册pack方案导致的,可以使用以下代码进行注册:

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

我猜想能够用打包方案加载字典的测试装置之所以没有出错,是因为在那里 SUT 是一个用户控件,并且在创建用户控件实例时会以某种方式加载资源。

2个回答

32

我使用的是UriKind,例如:

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

希望这能有所帮助。


0

@Prince Ashitaka的回答告诉你如何更正你的URI

然而,访问ResourceDictionary的首选方式是在XAML中将其添加为合并的字典

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

然后您可以通过任何代码后台文件中使用TryFindResource(string Key)来访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接