2011-12-08 68 views
3

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

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

回答

7

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

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

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

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

干杯, 洛朗

+0

感谢劳伦特,我猜是与MVVM一个小白我画了一个平行于有适用于所有页面的Styles.css文件。我想我可以通过在App.xaml中合并GlobalSkin.xaml之类的东西来达到目的。 – e36M3

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>