Объект для добавления ресурсов в ResourceDictionary - PullRequest
0 голосов
/ 15 марта 2012

Я хотел бы добавить несколько ресурсов в ResourceDictionary из одной строки XAML. Я постараюсь сделать из этого пример.

Представьте себе это:

<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, но безрезультатно.

Это чрезмерное упрощение того, что мне нужно, но я просто пытаюсь сделать XAML более общим.

Любые намеки на то, как можно этого достичь?

Примечание 1 : сгенерированные словари ресурсов должны быть доступны (используя их Key) для остальной части XAML в области, где я создал ресурс AllDictionaries.

Примечание 2 : допустим, для практических целей у меня нет доступа к исходному коду MyResourceDictionaryX классов, поэтому я ничего не могу изменить в этих

1 Ответ

1 голос
/ 15 марта 2012

Merged Resource Dictionary уже делает то, что вы хотите ... это можно создать с помощью XAML или кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...