2009-11-13 2 views
4

Должна быть возможность добавить код позади файла для словаря ресурсов В Silverlight но я получаю ту же ошибку, брошенный из InitializeComponent метода моего App.xaml конструктора: XamlParseException : AG_E_PARSER_BAD_TYPE.Ошибка при добавлении кода позади для Silverlight словаря ресурсов: 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> 

Что я делаю неправильно?

С наилучшими пожеланиями,

Ronald Wildenberg

ответ

9

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

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

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

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

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

Это сказал, что если не есть что-то вроде этого уже тогда вы можете также просто падение х: Class в целом.

Теперь ваш App.xaml должен выглядеть следующим образом: -

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

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

+0

Это работает! Огромное спасибо. Мне нужен код, потому что у меня есть шаблон внутри словаря ресурсов с помощью кнопки. Я хотел бы обработать событие Click где-то. Однако я не мог оставить класс x: Class. Необходимо было собрать код за классом для компиляции. –

0

ли ProvisiorResourceDictionary класс общественности? Если нет, возможно, вам нужно указать атрибут the x:ClassModifier.

+0

Да, это общедоступно ... –

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