1

在 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 文件之外还有其他方法可以做到这一点,我愿意尝试一下。

谢谢你。

4

0 回答 0