как использовать MainSkin.xaml в MVVM Light? - PullRequest
3 голосов
/ 08 декабря 2011

В настоящее время я определяю некоторые статические ресурсы и стиль, который использует эти ресурсы в моем окне.Я хотел бы переместить эту разметку в MainSkin.xaml, а затем иметь возможность ссылаться на нее во всех окнах, в которых мне нужен этот стиль.на исключение «System.Windows.StaticResourceExtension».Я предполагаю, что он не может найти стиль, на который я ссылаюсь?Нужно ли слить / связать это как-нибудь?

Ответы [ 2 ]

7 голосов
/ 09 декабря 2011

В WPF и Silverlight вы можете создавать любое количество словарей ресурсов, которые вам нужны. Это чисто логическая организация ресурсов. Нет никакой разницы между ресурсами, добавленными в словарь внешних ресурсов и затем объединенными, например, в Page.Resources, и ресурсами, добавленными непосредственно в Page.Resources.

На практике мы обычно определяем несколько словарей ресурсов:

  • Глобальные словари ресурсов: они объединены в App.xaml, что делает их автоматически доступными для всех страниц / окон / пользовательских элементов управления в приложении.
  • Определенные словари ресурсов, которые содержат ресурсы, относящиеся к данному окну, Страница / Пользовательский элемент управления.

MainSkin.xaml должен быть специфическим для MainWindow (как видно из названия). Это только предложение, и вы можете делать все, что хотите;) однако в вашем случае, если у вас есть ресурсы, которые используются в нескольких местах, я бы предпочел создать словарь глобальных ресурсов, объединить его с App.xaml и добавить их там.

Ура, Laurent

2 голосов
/ 08 декабря 2011

Я отвечу на свой вопрос, как только понял.Каждая страница, которая использует MainSkin.xaml, должна объединить его со своими ресурсами.По умолчанию MainWindow, созданное MVVM Light, сделает это за вас, но в дополнительных окнах вам нужно перенести разметку объединения.

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

        <! -- OTHER RESOURCES GO HERE, NOT DIRECTLY UNDER WINDOW.RESOURCES!!! -->

    </ResourceDictionary>
</Window.Resources>
...