Я ответил на симуляционный вопрос здесь и отредактировал его также для WPF. Вы можете использовать интересное свойство того, как работает движок компоновки, чтобы покрыть диспетчерский насос в одном из контекстов рендеринга. Это действительно легкий вариант.
Кроме того, я полагаю, вы знаете о корпоративной библиотеке и unity ?
Существует блок приложения WPF , поэтому использование этого шаблона не является слишком болезненным;) Но разве они не говорят, без боли нет выгоды?
Существует также CAB (составной блок приложения пользовательского интерфейса), связанный в единство. WPF SDK разработчики создали платформу Silverlight & WPF. (a.k.a Prism).
О, верно, вы также спрашивали о Ресурсах? Я предпочитаю загружать ресурсы вручную в классе Application. Я понял одну вещь: скажем, у вас есть ResourceDictionary в подпапке, и вы загружаете MergedDictionaries в этот ResourceDictionary. Итак, если в вашем классе Application вы загружаете «my-res-dir / MergedDictionaryLoader.xaml» (по коду или xaml), ВСЕ БУДУЩИЕ ЗАГРУЗКИ MERGEDDICTIONARIES ЗАГРУЖАЮТСЯ ИЗ «my-res-dir».
В некотором роде безумие, если вы спросите меня, я думаю, что поскольку текущий каталог процесса не изменился, вы должны указать «my-res-dir / foo.xaml» для всех ваших дополнительных каталогов. Однако это не так (я не верю, что это где-то задокументировано, по крайней мере, очень хорошо и должно рассматриваться как ошибка imho).
Помните, что загрузка словаря ресурсов WPF будет основываться на каталоге, из которого находится текущий XAML . Таким образом, вы указываете Source = "foo.xaml" изнутри вашего "my-res" -dir / MergedDictionaryLoader.xaml». Я даже играл с пакетом URI / абсолютным синтаксисом, однако никогда не находил, что это слишком интуитивно.