Ошибка xClassNotDerivedFromElement при добавлении кода в словарь ресурсов в silverlight - PullRequest
8 голосов
/ 30 июля 2010

Мне нужно добавить код позади класса в словарь ресурсов, как описано в этот вопрос .(Я знаю, что это не очень хорошая практика, но она должна работать на основе комментариев для связанного вопроса). Я ссылаюсь на код с атрибутом x: Class:

XAML (отдельный файл словаря ресурсов):

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MyNamespace.MyStandardResources">
    ...
</ResourceDictionary>

КОД:

using System.Windows;

namespace MyNamespace
{
    public partial class MyStandardResources : ResourceDictionary
    {
        public MyStandardResources()
        {
            InitializeComponent();
        }

        //...
    }
}

Это вызывает исключение анализатора времени выполнения:

Внутренняя ошибка синтаксического анализатора: объект записи ' xClassNotDerivedFromElement '.[Строка: xxx Позиция: xxx] в System.Windows.Application.LoadComponent.

Ресурсы включены в App.xaml с тегом ResourceDictionary.MergedDictionaries.

Ответы [ 3 ]

6 голосов
/ 26 октября 2010

Вы пытаетесь использовать этот ResourceDictionary в качестве значения источника объединенного словаря? Если так, то это не поддерживается. Вы получаете эту ошибку xClassNotDerivedFromElement, которая является странным способом указать это, но вот почему: значение атрибута Source переводится способом, который ссылается на XAML как XAML, а не как класс. Синтаксический анализатор XAML открывает этот XAML как чистое действие загрузки без использования прекомпиляции и не может согласовать класс x: в то время.

5 голосов
/ 27 августа 2012

Класс x: запрещен для объединенных словарей в App.xaml.Вместо этого вы должны использовать свой класс, определенный как код в ресурсах приложения:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         x:Class="MyNamespace.App"
         xmlns:view="clr-namespace:MyNamespace">

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <view:MyStandardResources />
                ....
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

</Application>
0 голосов
/ 22 ноября 2012

Жаль, что создание кода для словаря ресурсов теперь означает, что вы не можете создать ResourceDictionary, используя URI для xaml.

Я снова удалил свой код, но все равно создал ResourceDictionaryв коде, используя ответ на этот вопрос + и + ответ

По сути, он просто создает пустой ResourceDictionary и устанавливает его Source для xaml uri в коде.

Для меня это сработало лучше, потому что это означает, что кто-то еще может ссылаться на словарь ресурсов, если он этого хочет, и делать это «ожидаемым» способом.

...