Подтвердить что ты не робот

Как импортировать один ResourceDictionary в другой, в WPF?

Можно ли добавить один ресурсный словарь в другой? Спасибо за любую помощь.

4b9b3361

Ответ 1

В Dictionary2.xaml определите MergedDictionaries (сразу после открытия тега ResourceDictionary):

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Path/to/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>

есть улов: каждый раз, когда вы объединяете словари, вы эффективно создаете копию объединенного словаря. И он рекурсивный - если у вас есть Dict3.xaml и Dict4.xaml, которые загружают Dictionary2.xaml, у вас будет три экземпляра Dictionary1.xaml, созданных

Решение представляет собой SharedResourceDictionary. Реализация в учебнике должна рассматриваться как отправная точка и, вероятно, потребуется некоторый уровень настройки - в зависимости от сценария использования. Google "wpf SharedResourceDictionary" для некоторых исправлений и решений.

От ответа на этот вопрос от XAMeLi

Ответ 2

Отрывок из проекта sketchflow, над которым я работаю, показывает, как объединить ресурсные словари в xaml:

<Application.Resources>
    <!-- Resources scoped at the Application level should be defined here. -->
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Microsoft.Expression.Prototyping.SketchControls;component/ScrollViewerStyles.xaml"/>
            <ResourceDictionary Source="/[ProjectABC];component/[fileXYZ].xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Это показывает слияние двух дополнительных ресурсных словарей в другой словарь ресурсов.

(Обратите внимание, что порядок может стать важным, если у вас есть стили по умолчанию, определенные более чем в одном месте, поскольку они будут переопределять друг друга)

Ответ 3

Что-то вроде:

ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("/MyModule;component/MyModule.xaml", 
     UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(resources);

Возможно, это то, что вы ищете. Мы используем такой код в наших модулях Prism.

Ответ 4

Без дополнительного контекста вам сложно дать конкретный ответ. Вот некоторые возможные релевантные ресурсы по слиянию ресурсных словарей:

http://msdn.microsoft.com/en-us/library/aa350178.aspx