我正在尝试通过C#访问UserControl代码隐藏中的资源字典,但我收效甚微。
合并词典:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/BiometricDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
嵌入字典:
<UserControl.Resources>
<BitmapImage x:Key="imageDefault">/Resources/Images/default_thumb.png</BitmapImage>
<BitmapImage x:Key="imageDisconnected">/Resources/Images/disconnect_thumb.png</BitmapImage>
<BitmapImage x:Key="imageFailed">/Resources/Images/failed_thumb.png</BitmapImage>
<BitmapImage x:Key="imageSuccess">/Resources/Images/success_thumb.png</BitmapImage>
</UserControl.Resources>
代码背后:
var resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new Uri("/Resources/BiometricDictionary.xaml", UriKind.Relative);
我已经尝试了所有的例子和有用的提示,但很快就会出现。现在,成功将是加载字典的能力。有什么建议?
答案 0 :(得分:7)
要访问代码隐藏中的一个UserControl XAML资源,您只需访问UserControl的Resources属性即可。像这样:
BitmapImage myImage = (BitmapImage)this.Resources["imageDefault"];
但是,首选方法是使用FindResource(),它将搜索整个逻辑树以匹配键,而不仅仅是调用它的对象。
BitmapImage myImage = (BitmapImage)this.FindResource("imageDefault");
答案 1 :(得分:1)
尝试删除您所在位置的正斜杠。你唯一应该使用/ Resources的是你必须先上一个图书馆。喜欢../资源
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/BiometricDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
希望这会对你有所帮助。
答案 2 :(得分:0)
那么,你在UserControl的程序集中定义了一个ResourceDictionary,并希望从UserControl的代码隐藏中访问它吗?
你应该能够。但是,如果您列出的代码位于构造函数中,则可能无法访问资源字典(可能尚未加载)。尝试将相同的代码添加到UserControl的“已加载”事件中,并查看是否有效。如果您只是尝试访问资源(例如样式或模板),则直接使用“FindResource”或“TryFindResource”函数也应该可以正常工作(即您不会需要一个“ResourceDictionary”类型的对象。
希望有所帮助!
答案 3 :(得分:0)
d'Oh ...在编译到本地bin之后,引用是相对的,我实现了这里找到的包URI解决方案:ResourceDictionary in a separate assembly然后是FindResource(x:这里的键值)。
@PeterAllenWeb,@ Pwninstein,感谢您的快速反应并让我重新思考。