Загрузка ResourceDictionary динамически - PullRequest
4 голосов
/ 30 июня 2011

В моем проекте есть папка, Шаблоны , полная (скомпилированных) XAML ResourceDictionaries.

В UserControl я хочу загрузить все шаблоны в ResourceDictionary. Я бы использовал код, подобный следующему:

public MyView()
{
    InitializeComponent();
    foreach (var resourceUri in new GetResourceUrisFromTemplatesFolder())
        Resources.MergedDictionaries.Add(
            new ResourceDictionary
                { Source = new Uri(resourceUri, UriKind.Relative) });
}

Мне нужно написать метод GetResourceUrisFromTemplatesFolder. Мне нужно, чтобы найти все ресурсы из этой папки.

URI могут принимать форму, подобную /MyAssembly;component/MyNS/Templates/Template12345.xaml или ../../Templates/Template12345.xaml

Возможно ли это?

Нужно ли вручную преобразовывать имена из скомпилированных ресурсов сборки (MyAssembly.g.resources)?

Ответы [ 2 ]

6 голосов
/ 12 июня 2013

Кстати, можно также вручную загрузить ResourceDictionary, как кажется:

ResourceDictionary dict = new ResourceDictionary(); 
System.Windows.Application.LoadComponent(dict, 
  new System.Uri("/SomeAssembly;component/SomeResourceDictionary.xaml",
  System.UriKind.Relative));

После этого можно говорить с этим объектом dict, используя foreach в свойстве Keys, которое у него есть, и т.д.

Вhttp://msdn.microsoft.com/en-us/library/ms596995(v=vs.95).aspx говорит

Загружаемый файл XAML может быть либо файлом определения приложения (например, App.xaml)>, либо файлом страницы (например, MainPage.xaml),Файл XAML может находиться в одном из следующих мест:

  • Включен в пакет приложения.
  • Внедрено в сборку приложения.
  • Встроено в библиотечную сборку на месте происхождения.
1 голос
/ 30 июня 2011

Нужно ли вручную преобразовывать имена из скомпилированных ресурсов сборки (MyAssembly.g.resources)?

Это может быть так, и я сам подхожу к этому так, однако на вопрос о том, как это сделать уже дан ответ , так что это не должно быть большой проблемой. Убедитесь, что действие компиляции словарей совпадает, и вы, возможно, захотите добавить префикс к имени с пакетом uri.

...