В WPF как я могу ссылаться на статический ресурс, который определен в другом файле XAML? - PullRequest
7 голосов
/ 03 сентября 2010

Как в WPF ссылаться на статический ресурс, определенный в другом файле XAML? Это в том же проекте.

Ответы [ 2 ]

8 голосов
/ 03 сентября 2010

Другой файл XAML должен быть словарем ресурсов. Вы объединяете его в текущий файл, используя свойство MergedDictionaries текущего ResourceDictionary. См. Объединенные словари ресурсов в MSDN. Их пример:

<Page.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="myresourcedictionary.xaml"/>
      <ResourceDictionary Source="myresourcedictionary2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Page.Resources>

Затем внутри этого объекта Page вы можете ссылаться на статические ресурсы, определенные в myresourcedictionary.xaml или myresourcedictionary2.xaml.

3 голосов
/ 03 сентября 2010

«другой файл XAML» может означать несколько разных вещей:

  • App.xaml: ресурсы автоматически включаются в дерево ресурсов всего, что открыто, поэтому вам не нужно делать ничего лишнего.
  • Окно или страница .xaml: к ресурсам может обращаться любой дочерний элемент экземпляра объекта, например UserControl, который используется в окне.
  • ResourceDictionary: необходимо явно объединить в дереве ресурсов где-то выше, где оно используется. Это может быть App.xaml, Windowxx.xaml или какой-либо элемент более низкого уровня. Используйте ResourceDictionary.MergedDictionaries для этого.

Есть также много альтернативных способов указать путь, но это самый простой:

<Window>
    <Window.Resources>
      <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="Resources/MyResourceDict.xaml" />
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
    </Window.Resources>
...