用于向ResourceDictionary添加资源的对象

时间:2012-03-15 14:40:33

标签: c# wpf xaml

我想从一行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类源代码,因此我无法更改任何内容

1 个答案:

答案 0 :(得分:1)

Merged Resource Dictionary已经做了你想要的......它可以通过XAML或代码创建。