我想从一行XAML中向ResourceDictionary添加几个资源。我会尝试用它做一个例子。
想象一下:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:util="clr-namespace:Util">
<util:MyResourceDictionaryA x:Key="MyResourceDictionaryA" />
<util:MyResourceDictionaryB x:Key="MyResourceDictionaryB" />
<util:MyResourceDictionaryC x:Key="MyResourceDictionaryC" />
<util:MyResourceDictionaryD x:Key="MyResourceDictionaryD" />
</ResourceDictionary>
我希望有类似的东西:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:util="clr-namespace:Util">
<util:AllDictionaries x:Key="AllDictionaries" BaseName="MyResourceDictionary" />
</ResourceDictionary>
我尝试过这样的新ResourceDictionary:
public class AllDictionaries : ResourceDictionary
{
public string BaseName { get; set; }
public AllDictionaries ()
{
Clear();
var s = BaseName;
var DictionariesToLoad = new[] { "A", "B", "C", "D" };
foreach (var b in DictionariesToLoad )
{
var t = Type.GetType(b + s);
var resDir = Activator.CreateInstance(t) as ResourceDictionary;
Add(b + s, resDir);
}
}
}
但是,构造函数永远不会被调用(或者,在XAML引用{StaticResource MyResourceDictionaryX}
中的其他东西之前没有被添加到应用程序资源中,因此它会引发异常)。我也尝试将代码放在BaseName
setter上,但没有用。
这是我需要的过度紧绷,但我只是想让XAML更通用。
有关如何实现这一目标的任何提示?
注1 :生成的资源字典需要(我们的Key
)资源可用于我创建AllDictionaries资源的范围内的其他XAML。
注意2 :出于实际目的,假设我无权访问MyResourceDictionaryX
类源代码,因此我无法更改任何内容