VS 2012 App.xaml隐式样式问题

时间:2013-04-06 22:51:31

标签: c# .net wpf xaml resourcedictionary

我正在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文件中时会中断。当我在App.xaml文件中加载ResourceDictionaries时,我仍然可以访问ResourceDictionaries中的所有资源(使用DynamicResource),我甚至可以在控件上显式定义样式,因此通过该逻辑,我可以将问题追溯到要做的事情使用App.xaml文件中的隐式声明。

我发现了一些相关问题(Reference One),但没有一个问题可用或可行的解决方案。

在安装了MahApps.Metro(参考:http://mahapps.com/MahApps.Metro/)的窗口,一些随机控件以及位于App.xaml文件中的所有ResourceDictionary引用的测试应用程序中,这是完全可重现的。

另一个奇怪的事情是,在VS 2012 XAML Designer视图中,所有隐式定义的控件和颜色都正确加载,但是一旦应用程序启动它就会中断(但不会崩溃或输出任何错误)。

对于这个项目,我需要这些资源全局可用(在项目中的所有文件上),所以如果除了使用App.xaml文件之外还有其他方法可以尝试。我愿意尝试一下。 / p>

谢谢。

0 个答案:

没有答案