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

时间:2011-12-08 18:00:03

标签: wpf mvvm-light

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

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

2 个答案:

答案 0 :(得分:7)

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

实际上,我们通常会定义一些资源词典:

  • 全局资源词典:这些词汇合并到App.xaml,这使它们可以自动用于应用程序中的所有页面/窗口/用户控件。
  • 特定资源字典,其中包含特定于给定窗口,页面/用户控件的资源。

MainSkin.xaml应该特定于MainWindow(如名称所示)。这只是一个建议,您可以随心所欲地执行;)但是在您的情况下,如果您有多个地方使用的资源,我宁愿创建一个全局资源字典,将其合并到App.xaml并将它们添加到那里。

干杯, 劳伦

答案 1 :(得分:2)

当我弄清楚时,我会回答我自己的问题。每个使用MainSkin.xaml的页面都需要将其合并到其资源中。默认情况下,由MVVM Light创建的MainWindow将为您完成,但需要额外的窗口来进行合并标记。

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

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

    </ResourceDictionary>
</Window.Resources>