Я хотел бы добавить несколько ресурсов в 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
классов, поэтому я ничего не могу изменить в этих