Ошибка при добавлении кода для словаря ресурсов Silverlight: AG_E_PARSER_BAD_TYPE - PullRequest
4 голосов
/ 13 ноября 2009

Должна быть возможность добавить код файла для словаря ресурсов в Silverlight, но я продолжаю получать ту же ошибку, которая выдается из метода InitializeComponent моего App.xaml конструктора: XamlParseException: AG_E_PARSER_BAD_TYPE.

Файл xaml словаря ресурсов выглядит следующим образом:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="Celerior.Annapurna.SL.ProvisiorResourceDictionary"
    x:ClassModifier="public">
    ...
</ResourceDictionary>

Если я удаляю атрибут x:Class, все снова работает нормально (конечно, я дважды проверил имя класса, и оно правильно). Мой App.xaml файл не очень интересен и содержит ссылку на словарь ресурсов:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             x:Class="Celerior.Annapurna.SL.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ProvisiorResourceDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Что я делаю не так?

С уважением,

Рональд Вильденберг

Ответы [ 2 ]

9 голосов
/ 13 ноября 2009

Silverlight не поддерживает x: ClassModifier, поддерживаемый только в WPF.

Кроме того, x: Class недопустим в словаре ресурсов. Конечно, при попытке включить Xaml из словаря ресурсов в качестве объединенного словаря Silverlight не будет знать, что делать с классом x: на этом этапе.

На самом деле вышеприведенное не совсем верно. X: Класс действителен, но способ включения словаря в словарь приложения требует настройки. Позвольте мне сначала просто заявить, что здесь есть предположение, что вам действительно нужно подкласс ResourceDictionary (если не просто удалить x: Class).

Я также собираюсь выйти на конечность, основываясь на том, что вы включили x: ClassModifier, что у вас на самом деле нет файла ProvisiorResourceDictionary.xaml.cs в вашем проекте. Поскольку SL всегда создает публичную частичку, этот файл должен содержать как минимум: -

public partial class ProvisiorResourceDictionary
{
    public ProvisiorResourceDictionary()
    {
        InitializeComponent();
    }
}

Тем не менее, если у вас уже нет чего-то подобного, вы можете просто отказаться от x: Class в целом.

Теперь ваш app.xaml должен выглядеть так: -

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <common:ProvisiorResourceDictionary /> 
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
</Application.Resources>

Вместо того чтобы пытаться импортировать файл XAML в качестве ресурса через свойство Source, теперь вы включаете экземпляр специализированного ResourceDictionary.

0 голосов
/ 13 ноября 2009

Является ли класс ProvisiorResourceDictionary публичным? Если нет, возможно, вам нужно указать атрибут x: ClassModifier .

...