如何从ValueConverter访问资源?

时间:2013-04-01 21:08:15

标签: wpf resources ivalueconverter

我在自定义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中。尽管如此,我认为所有资源都会根据您执行的位置而缩减到应用程序。

1 个答案:

答案 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"];

然后应该应用一些修复程序:

  

@ Stephen Ross

     

但是要想使用它的密钥来查找资源,我必须在尝试访问res.InitializeComponent()之前先调用key,否则该对象将不显示任何密钥,并且对res["myKey"]的调用将返回null