2011-12-08 99 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>