1

我在自定义 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 中。尽管如此,我认为所有资源都归结为应用程序,具体取决于您执行的位置。

4

1 回答 1

0

在这里找到完美的解决方案通过 WPF 中的代码隐藏访问资源 (比使用更好Application.Current

@伊索

您可以简单地添加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

于 2019-05-15T08:15:39.580 回答