Wpf 如何在MVVM Light中使用MainSkin.xaml?

Wpf 如何在MVVM Light中使用MainSkin.xaml?,wpf,mvvm-light,Wpf,Mvvm Light,我目前定义了一些静态资源和在我的窗口中使用这些资源的样式。我希望将该标记移到MainSkin.xaml,然后能够在需要该样式的所有窗口中引用它 如果我简单地将标记移到上面,我会得到一个“在'System.Windows.StaticResourceExtension'上提供值”异常。我假设它找不到我引用的样式?我是否需要以某种方式合并/链接它?我会在找到答案后回答我自己的问题。每个使用MainSkin.xaml的页面都需要将其合并到其资源中。默认情况下,由MVVM Light创建的主窗口将为您完

我目前定义了一些静态资源和在我的窗口中使用这些资源的样式。我希望将该标记移到MainSkin.xaml,然后能够在需要该样式的所有窗口中引用它


如果我简单地将标记移到上面,我会得到一个“在'System.Windows.StaticResourceExtension'上提供值”异常。我假设它找不到我引用的样式?我是否需要以某种方式合并/链接它?

我会在找到答案后回答我自己的问题。每个使用MainSkin.xaml的页面都需要将其合并到其资源中。默认情况下,由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>

在WPF和Silverlight中,您可以创建所需的任意数量的资源字典。这纯粹是资源的逻辑组织。添加到外部资源字典中然后合并到例如
Page.resources
中的资源与直接添加到
Page.resources
中的资源之间没有区别

在实践中,我们通常定义一些资源字典:

  • 全局资源字典:这些字典合并到
    App.xaml
    ,这使它们自动可用于应用程序中的所有页面/窗口/用户控件
  • 特定资源字典,其中包含特定于给定窗口、页面/用户控件的资源
MainSkin.xaml
应该是特定于
MainWindow
(如名称所示)。这只是一个建议,你可以随意做你想做的;)然而,在您的情况下,如果您有多个地方使用的资源,我宁愿创建一个全局资源字典,将其合并到
App.xaml
中并添加到那里

干杯,
Laurent

谢谢Laurent,我想作为一个mvvm的noob,我画了一个平行的样式。css应用于所有页面。我想我可以通过在App.xaml中合并GlobalSkin.xaml之类的东西来实现这一点。