在 Microsoft Visual Studio 2012 IDE 中工作时,我正在设计基于 MahApps.Metro 开源工具包的 C# 和 XAML 应用程序。除了在 App.xaml 文件中引用的隐式定义的样式外,一切正常。App.xaml 文件中资源字典的代码如下所示:
<Application x:Class="MyApplication"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MainDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
MainDictionary.xaml 文件中的代码如下所示:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedSingleRowTabControl.xaml" />
<ResourceDictionary Source="/Resources/Icons.xaml" />
<ResourceDictionary Source="/Resources/stringTable.xaml" />
<ResourceDictionary Source="/Styles/controls.styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
MahApps.Metro 项目中的 Controls.xaml 文件包含几乎所有可用标准控件的许多隐式定义(参考代码的Git/Source),以及一些颜色/主题定义。这是正在破坏的字典。
这种格式在我的 MainWindow.xaml 文件中运行良好,其中所有隐式样式在所有默认控件上都正常运行,但当它位于我的 App.xaml 文件中时会中断。当 ResourceDictionaries 加载到我的 App.xaml 文件中时,我仍然可以访问所有资源(使用 DynamicResource),我什至可以在控件上显式定义样式,因此通过该逻辑我可以将问题追溯到要做的事情App.xaml 文件中的隐式声明。
我发现了一些相关问题(参考资料一),但没有一个可行或可行的解决方案可用。
这在安装了 MahApps.Metro(参考:http://mahapps.com/MahApps.Metro/)的测试应用程序中完全可以重现,一个窗口、一些随机控件以及位于 App.xaml 文件中的所有 ResourceDictionary 引用。
另一个奇怪的事情是,在 VS 2012 XAML 设计器视图中,所有隐式定义的控件和颜色都正确加载,但是一旦应用程序启动它就会中断(但不会崩溃或输出任何错误)。
对于这个项目,我需要这些资源在全球范围内可用(在项目中的所有文件上),所以如果除了使用 App.xaml 文件之外还有其他方法可以做到这一点,我愿意尝试一下。
谢谢你。