我有一些常见的资源,比如我想在多个资源词典中使用的Brushes,Converers等:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes/Common.xaml" />
<ResourceDictionary Source="/Themes/CustomStyles1.xaml" />
<ResourceDictionary Source="/Themes/CustomStyles2.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
除非我将Common.xaml添加到CustomStyle1.xaml中的MergedDictionaries,否则无法识别使用StaticResource
或ThemeResource
标记扩展的CustomStyle1.xaml中Common.xaml引用的资源:
<!-- CustomStyles1.xaml -->
<ResourceDictionary
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes/Common.xaml" />
</ResourceDictionary.MergedDictionaries>
但是,每次将其添加到MergedDictionaries时都会加载Common.xaml,并且资源会多次实例化。
答案 0 :(得分:0)
关键点是您引用Common.xaml
到CustomSyle1.xaml
词典的原因。
你有三个字典,更好的方法是每个字典包含不同的资源,并且它们之间没有依赖关系。因此,当您在页面中使用其中一个或两个时,将它们合并到页面资源中,并且可以使用所有合并的资源。
如果您确实希望引用Common.xaml
至CustomSyle1.xaml
,假设您需要在一个页面中使用Common.xaml
以及CustomStyle1.xaml
,则只需要合并由于CustomStyle1.xaml
已合并到Common.xaml
,因此页面资源为CustomSyle1.xaml
。在这种情况下,您将不会有多个实例化的谜题。