WPF全球类MVVM

时间:2016-04-12 16:57:16

标签: c# wpf mvvm

尝试在App.xaml;

中设置全局类
<Application.Resources>
    <local:MySettingsClass x:Key="GlobalSettings" />
    <ResourceDictionary >
        <!-- My Resources -->
    </ResourceDictionary >
</Application.Resources>

虽然我收到

的错误消息
  

每个词典条目必须具有关联的密钥。

  

'App'不包含'InitializeComponent'的定义,并且没有扩展方法'InitializeComponent'接受类型'App'的第一个参数可以找到(你是否缺少using指令或汇编引用?)

现在我可以进入并x:KeyResourceDictionary,但我从未见过有人这样做,所以这似乎是错误的。第二条错误消息让我相信我做错了。

我对这个问题有错误的解决方案,还是我想念的东西很简单?

1 个答案:

答案 0 :(得分:3)

Application.Resources是一个隐式的资源字典。你可以在那里拍资源。这是有效的:

<Application.Resources>
    <local:MySettingsClass x:Key="GlobalSettings" />
    <!-- Pretty much anything with an x:Key attribute. -->
</Application.Resources>

但是,如果您要合并字典,则需要使用明确的<ResourceDictionary>标记,并且通常在App.xaml中,您需要合并字典。

您遇到的问题是,在您的XAML中,它首先看到的是您的GlobalSettings资源。这是它看到的第一件事,所以它确定没问题,他只是在这里打了一些资源。它创建一个ResourceDictionary并继续添加它看到的所有内容。它看到的下一件事是<ResourceDictionary>,它认为您正在尝试将另一个资源字典作为资源添加到第一个资源字典中,但没有x:Key属性。我刚刚试过,它确实让我添加一个x:Key,而不是我知道有任何理由这样做。它没有将资源合并到外部资源中。

试试这个:

<Application.Resources>
    <ResourceDictionary>
        <!-- One of My Resources -->
        <local:MySettingsClass x:Key="GlobalSettings" />

        <!-- My Other Resources -->

        <ResourceDictionary.MergedDictionaries>
            <!-- Merged dictionaries -->
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

如果您不断收到InitializeComponent错误,请分享您的App.xaml.cs代码