从WPF UserControl访问ResourceDictionary

我正试图通过C#访问UserControl代码隐藏中的资源字典,但我收效甚微。

合并词典:

       

嵌入字典:

  /Resources/Images/default_thumb.png /Resources/Images/disconnect_thumb.png /Resources/Images/failed_thumb.png /Resources/Images/success_thumb.png  

代码背后:

  var resourceDictionary = new ResourceDictionary(); resourceDictionary.Source = new Uri("/Resources/BiometricDictionary.xaml", UriKind.Relative); 

我已经尝试了所有的例子和有用的提示,但很快就会出现。 现在,成功将是加载字典的能力。 有什么建议?

要在代码隐藏中访问UserControl的一个XAML资源,您只需访问UserControl的Resources属性即可。 像这样的东西:

 BitmapImage myImage = (BitmapImage)this.Resources["imageDefault"]; 

但是,首选方法是使用FindResource(),它将搜索整个逻辑树以匹配键,而不仅仅是调用它的对象。

 BitmapImage myImage = (BitmapImage)this.FindResource("imageDefault"); 

尝试删除您所在位置的正斜杠。 你应该使用/ Resources的唯一时间是你必须先上一个图书馆。 比如../Resources

        

希望这对你有所帮助。

那么,你有一个在UserControl的程序集中定义的ResourceDictionary,并希望从UserControl的代码隐藏中访问它?

你应该能够。 但是,如果您列出的代码位于构造函数中,则可能无法访问资源字典(可能尚未加载)。 尝试将相同的代码添加到UserControl的“已加载”事件中,看看是否有效。 如果您只是尝试访问资源(例如样式或模板),则直接从您的类使用“ FindResource ”或“ TryFindResource ”函数也应该可以正常工作(即您不需要具有类型的对象“资源字典“)。

希望有所帮助!

d’Oh …在编译到本地bin后,引用是相对的,我实现了这里找到的包URI解决方案: ResourceDictionary在一个单独的程序集中 ,然后是FindResource(x:键值在这里)。

@PeterAllenWeb,@ Pwninstein,感谢您的快速反应并让我再次思考。