我目前定义了一些静态资源以及在我的窗口中使用这些资源的样式。我想将该标记移动到MainSkin.xaml,然后能够在我需要该样式的所有窗口中引用它。
如果我只是简单地移动标记,我会在“System.Windows.StaticResourceExtension”上获得“提供值”异常。我假设它找不到我引用的样式?我需要以某种方式将其合并/链接吗?
答案 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>