2016-02-22 5 views
2

У меня проблема с возобновностью с моим App.Resources MergedDictionary. Каждый раз, когда вы добавляете новый словарь с пространством имен источника и XML из другой сборки, возникает ошибка, и я не могу создать свою программу.WPF MergedDictionaries - значение не может быть нулевым - имя параметра: item

Ошибка появляется в App.xaml с подчеркнутым ResourceDictionary и сообщением Value Cannot be Null. Parameter Name: item. Это не имеет никакого смысла, поскольку я сделал то же самое раньше. Единственное отличие состоит в том, что на этот раз я ссылаюсь на пространство имен другой сборки (библиотека классов C#). Вот файл App.xaml:

<Application x:Class="Quiz.Client.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:Quiz.Client" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/Styles.xaml" /> 
       <ResourceDictionary Source="Resources/Templates.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Ниже Styles.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Quiz.Client"> 

    <Style x:Key="StrongFont" 
      TargetType="ContentControl"> 
     <Setter Property="FontSize" 
       Value="20" /> 
     <Setter Property="FontWeight" 
       Value="ExtraBold" /> 
     <Setter Property="Foreground" 
       Value="DarkRed" /> 
    </Style> 


</ResourceDictionary> 

Вот Templates.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Quiz.Client" 
        xmlns:domain="clr-namespace:Quiz.Core.Domain;assembly=Quiz.Core" 
        xmlns:common="clr-namespace:Quiz.Client.Common"> 

    <DataTemplate x:Key="ArithmeticQuestionTemplate" 
        DataType="domain:ArithmeticQuestion"> 

    </DataTemplate> 

    <common:QuestionTemplateSelector x:Key="QuestionTemplateSelector" 
            ArithmeticTemplate="{StaticResource ArithmeticQuestionTemplate}" /> 

</ResourceDictionary> 

Какого черта происходит? Было ли внесено изменение программного обеспечения или что-то еще? Я полностью потерян.

+0

Вам повезло? –

ответ

0

Не знаете, почему ваш метод не работает, но я не так обычно импортирую ресурсы самостоятельно. Обычно я добавлю ResourceDictionary в моей библиотеке проекта, поставить все библиотеки ресурсов в том, что и импортировать его в мой основной проект с использованием пакета синтаксис:

<Application.Resources> 
    <ResourceDictionary> 

     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/MyLibrary;component/LibraryResources.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 

     <!-- main project resources go here --> 

    </ResourceDictionary> 

В общем, я бы утверждать, что это лучше архитектура в любом случае поскольку он не требует повторной компиляции вашего основного проекта каждый раз, когда изменяется один из ресурсов дочерней библиотеки. Это также упростит работу, если вы решите переключиться на MEF, поскольку ваши ресурсы библиотеки теперь инкапсулированы в один объект ResourceDictionary, который вы можете легко получить [Export].

+0

Спасибо за ответ. Я считаю, что это ошибка Visual Studio, вызванная чем-то неизвестным. Может быть, один из моих плагинов, кто знает. Единственное, что устраняет проблему, - это перезапустить визуальную студию и создать проект. Проблема, похоже, начинается с добавления нового пространства имен из другой сборки. Затем проект не может быть создан до тех пор, пока визуальная студия не будет перезапущена. Очень странно, никогда не видел ничего подобного. – CanadaIT

Смежные вопросы