2010-08-24 74 views
13

同一組件中的同一行代碼適用於一個測試夾具,但不適用於另一個測試夾具。下面是代碼行:訪問代碼中的資源字典wpf

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); 

我猜測,測試夾具,這是能夠加載字典中沒有錯誤的包方案是因爲SUT是一個用戶控件存在,並且以某種方式重新加載當用戶控件的一個實例被創建時來源。

回答

26

我用的是UriKind像

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

HTH

0

@Prince阿席達卡答案告訴你如何糾正你的URI

但是訪問資源字典的最佳方式是,在XAML您將其作爲合併字典添加它

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

然後你可以通過代碼使用TryFindResource(string Key)從代碼