我在自定义DLL程序集中有一个UserControl,我在其中定义了两个静态BitmapImage资源,这些资源表示ItemsControl中的数据状态。我想使用转换器根据某些条件将Image的Source属性设置为BitmapImage资源之一。但是,我不确定如何从Convert
方法内部访问资源,因为我没有我正在使用转换器的控件实例。
我已经尝试将资源加载到转换器的静态构造函数中的静态变量中,这也是在同一个DLL中,但我还没有成功。
这失败了......
public class MyConverter : IValueConverter
{
static BitmapImage myFirstResource;
static MyConverter()
{
// This can't seem to find the resource...
myFirstResource = (BitmapImage)Application.Current.FindResource("MyResourceKey");
}
}
...但是在XAML中,这成功了,所以我知道资源键是有效的。
<Image Source="{StaticResource MyResourceKey}" />
我不知道这是否有任何区别,但这是在DLL中,而不是在EXE中。尽管如此,我认为所有资源都会根据您执行的位置而缩减到应用程序。
答案 0 :(得分:0)
在这里Accessing a resource via codebehind in WPF找到了完美的解决方案
(比使用Application.Current
更好)
@ itsho
您只需将
x:Class
添加到其中:<ResourceDictionary x:Class="Namespace.NewClassName" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <ds:MyCollection x:Key="myKey" x:Name="myName" /> </ResourceDictionary>
然后在后面的代码中使用它:
var res = new Namespace.NewClassName(); var col = res["myKey"];
然后应该应用一些修复程序:
但是要想使用它的密钥来查找资源,我必须在尝试访问
res.InitializeComponent()
之前先调用key
,否则该对象将不显示任何密钥,并且对res["myKey"]
的调用将返回null