Как использовать глобальные ресурсы в WPF?

У меня есть приложение WPF, в которое я хотел бы использовать некоторые статические ресурсы. Я создал файл XAML библиотеки ресурсов, который содержит ресурс. Я также добавил строку в ресурсы проекта через панель "Свойства".

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

{StaticResource ResourceName}

Но визуальная студия говорит мне, что ресурсы не найдены. Должен ли я включать какую-то форму ссылки в свой XAML? Примеры, которые я видел, включают только ресурсы локально, такие как:

<Window.Resources>, <Page.Resources> etc

Я не хочу включать ресурсы локально, потому что хочу, чтобы они были доступны для нескольких частей приложения.

Ответ 1

Поместите их в App.xaml:)

В каждом приложении WPF есть App.xaml(и соответствующий ему код файл, App.xaml.cs или App.xaml.vb) который работает как глобальный файл для широкие заявления приложений. Ты можешь используйте этот файл, чтобы объявить константу выглядеть и чувствовать себя в вашем приложении. Например, вы можете объявить значение по умолчанию красный фон для всех кнопок в приложение.

http://www.microsoft.com/emea/msdn/thepanel/en/articles/introduction_wpf.aspx

Ответ 2

Посмотрите раздел "поведение поиска статического ресурса" здесь. Все, что содержится в словаре ресурсов приложения (т.е. Application.Resources), доступно во всем мире. Всякий раз, когда вы просматриваете ресурс с заданным ключом и ключ не используется нигде в иерархии локальных ресурсных словарей, возвращается в словарь приложения.

Чтобы заполнить словарь ресурсов приложения в XAML, найдите файл XAML для приложения (обычно App.xaml) и добавьте элемент Application.Resources.

Ответ 3

Вы можете создать словарь глобальных ресурсов и включить его путь в app.xaml

<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/YourProject;Component/YourXamlFile.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

Теперь все ваши ресурсы в YourXamlFile.xaml будут видны глобально в вашем проекте.

Ответ 4

Просто добавьте 2 цента здесь.

Я также хотел использовать глобальные ресурсы, но я использую собственный класс приложений, поэтому я не мог просто поместить его в App.xaml.

Я создал Resource.xaml в своем корневом расположении, а затем сделал следующее:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/MyWpfClient;component/Resources.xaml", UriKind.Relative) });

Но будьте осторожны, Resource.xaml ДОЛЖЕН иметь действие сборки на странице. Когда этого не произошло, он не смог найти некоторые типы, которые я использовал в качестве преобразователей.