2013-04-29 3 views
2

У меня есть приложение WPF, которое записывается с использованием PRISM. Я хочу, чтобы он легко «заклеймился». Поэтому я начал создавать модуль, который при инициализации добавленных ресурсных словарей к приложению. Это работало до тех пор, пока я не захотел создать некоторые компоненты непосредственно в shell.xaml. Модуль не инициализируется, когда xaml анализируется, поэтому он содержит ошибки.WPF Загрузка ресурсов через PRISM

Я знаю, что могу ссылаться на ресурс, используя синтаксис приложения: ///, но затем заставляет dll для моделирования быть названным конкретным именем, которое я не люблю.

Есть ли у кого-нибудь другие предложения?

ответ

0

Этот ответ waaaay после факта, но это то, что я планирую для моего текущего проекта, используя MEF. Он не должен быть модулем.

Это интерфейс

[InheritedImport] 
public interface IBrandProvider 
{ 
    ResourceDictionary ProvideResources(); 
} 

Реализация загрузит словарь ресурсов с помощью пакета URI синтаксиса, который вы уже намекали. Реализация на вашей оболочке может выглядеть так:

[ImportingConstructor] 
public MainWindow(IBrandProvider brand) 
{ 
    this.Resources.MergedDictionaries.Add(brand.ProvideResources()); 
} 

Убедитесь, что ваш IBrandProvider находится в контейнере (Unity или MEF) и убедитесь, что вы используете его где-нибудь. БУМ, ты в порядке. Как и следовало ожидать, это невозможно или даже желательно в XAML.

Для дополнительного вкуса интерфейс может вернуть значение, указывающее, на каком уровне вы хотите, чтобы ресурсы были автоматически применены - приложение, оболочка или нет (с ключом, чтобы вы могли, возможно, выбрать их позже).

Смежные вопросы